1) Toto chování je dostupné v SQL2005 -> SQL2008R2.
2) Proč sys.dm_exec_sql_text.dbid
má (někdy) NULL?
- V rámci SQL2005 -> SQL2008R2
dbid
je NULL „pro ad hoc a připravené příkazy SQL“ (viz MSDN pro SQL Server 2008 R2 ). - V rámci SQL 2012 „U ad hoc a připravených příkazů SQL ID databáze, kde byly příkazy zkompilovány“ (viz MSDN
). Takže od SQL2012
dbid
vrátí hodnotu jinou než NULL včetně „ad hoc a připravených příkazů SQL“.
3) K vyřešení tohoto problému v SQL2008 -> SQL2008R2 jsem použil sys.dm_exec_plan_attributes
(viz MSDN
)
SELECT ..., ISNULL(s2.dbid,CONVERT(SMALLINT,att.value)) AS my_dbid, ...
FROM sys.dm_exec_query_stats AS s1
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2
CROSS APPLY sys.dm_exec_plan_attributes(s1.plan_handle) att
WHERE att.attribute='dbid