1) Detta beteende är tillgängligt i SQL2005 -> SQL2008R2.
2) Varför sys.dm_exec_sql_text.dbid
har (ibland) NULLs ?
- Inom SQL2005 -> SQL2008R2
dbid
är NULL "för ad hoc och förberedda SQL-satser" (se MSDN för SQL Server 2008 R2 ). - Inom SQL 2012 "För ad hoc och förberedda SQL-satser, ID för databasen där satserna kompilerades" (se MSDN
). Så från och med SQL2012
dbid
returnerar ett icke-NULL-värde inklusive "ad hoc och förberedda SQL-satser".
3) För att lösa detta problem i SQL2008 -> SQL2008R2 använde jag sys.dm_exec_plan_attributes
(se 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