这是困扰我的事情,虽然从来没有引起任何真正的问题,因为我通常可以通过其他方式找到这些信息,但是有人可以解释为什么NULL
可能会在DMV 的 、 和 列中返回,但在dbid
列objectid
中number
产生结果?我理解为什么输出会反向返回(例如所有列但会产生数据),但我已经在多个 SQL Server 版本中多次看到这种行为,并且文档似乎并不暗示这应该是可能的,或者我只是读错了。sys.dm_exec_sql_text
text
text
这是我正在运行的查询的示例:
SELECT TOP 100
t.*
, s.*
, c.*
FROM sys.dm_exec_query_stats s
LEFT JOIN sys.dm_exec_connections c
ON c.most_recent_sql_handle = s.sql_handle
CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) t
WHERE s.execution_count > 1 AND DATEDIFF (second, creation_time, GETDATE()) > 0
AND t.dbid IS NULL
这是该列中的一个结果的示例,text
这意味着这与临时对象无关,而我通常认为这是原因。
select * from [dbo].[Map_ProviderSpecialty]
NULL
这些列返回值的情况是什么?
到目前为止,这是设计使然。有一个关于这个问题的连接项,目前已关闭。
sys.dm_exec_query_stats DBID 列 NULL 用于动态 SQL - Theo Ekelmans
但最后有一条评论:
评论部分也有一些解决方法,正如@sp_BiltzErik 在上面的评论中提到的那样。
对于未通过存储过程执行的 SQL,dbid 和 objectid 可能为 NULL 对我来说是有意义的。例如,哪个数据库和对象应该代表以下即席查询?
我的猜测是,按照设计,SQL 不希望尝试决定选择三个数据库中的哪一个来表示 sys.dm_exec_sql_text() 结果中的语句。