1) Dieses Verhalten ist in SQL2005 -> SQL2008R2 verfügbar.
2) Warum sys.dm_exec_sql_text.dbid hat (manchmal) NULLen ?
- Innerhalb von SQL2005 -> SQL2008R2
dbidist NULL "für Ad-hoc- und vorbereitete SQL-Anweisungen" (siehe MSDN für SQL Server 2008 R2 ). - In SQL 2012 „Für Ad-hoc- und vorbereitete SQL-Anweisungen die ID der Datenbank, in der die Anweisungen kompiliert wurden“ (siehe MSDN
). Also ab SQL2012
dbidgibt einen Nicht-NULL-Wert zurück, einschließlich "Ad-hoc- und vorbereiteter SQL-Anweisungen".
3) Um dieses Problem in SQL2008 -> SQL2008R2 zu lösen, habe ich sys.dm_exec_plan_attributes verwendet (siehe 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