1) Dit gedrag is beschikbaar in SQL2005 -> SQL2008R2.
2) Waarom sys.dm_exec_sql_text.dbid
heeft (soms) NULL's?
- Binnen SQL2005 -> SQL2008R2
dbid
is NULL "voor ad hoc en voorbereide SQL-instructies" (zie MSDN voor SQL Server 2008 R2 ). - Binnen SQL 2012 "Voor ad hoc en voorbereide SQL-instructies, de ID van de database waarin de instructies zijn gecompileerd" (zie MSDN
). Dus vanaf SQL2012
dbid
retourneert een niet-NULL-waarde inclusief "ad hoc en voorbereide SQL-instructies".
3) Om dit probleem op te lossen in SQL2008 -> SQL2008R2 heb ik sys.dm_exec_plan_attributes
gebruikt (zie 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