sys.dm_exec_sql_text 在 dbid、objectid 和 number 列中返回 NULL,但不返回 text

Joh*_*ner 4 sql-server dmv

这是值得的窃听我虽然从来没有引起任何真正的问题,我可以大致找到其他方式提供这些信息,但有人可以解释为什么NULL可以在返回dbidobjectid以及number从列sys.dm_exec_sql_text在DMV,但收效text列?我理解为什么输出会反向返回(例如所有列但text会产生数据),但我已经在多个 SQL Server 版本中多次看到这种行为,并且文档似乎并不暗示这应该是可能的,或者我只是读错了。

这是我正在运行的查询示例:

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
Run Code Online (Sandbox Code Playgroud)

这是该text列的其中一个结果的示例,这意味着这与临时对象无关,而这正是我通常猜测的原因。

select * from [dbo].[Map_ProviderSpecialty]
Run Code Online (Sandbox Code Playgroud)

这些列返回NULL值的情况是什么?

Sql*_*ide 5

这是目前的设计。有一个关于此问题的连接项目,目前已关闭。

sys.dm_exec_query_stats 动态 SQL 的 DBID 列 NULL - 作者 Theo Ekelmans

但最后有一条评论:

感谢您的反馈!我们将在 SQL Server 的下一个版本中考虑它。

评论部分也有一些解决方法,正如@sp_BiltzErik 在上面的评论中提到的那样。