1) Dieses Verhalten ist in SQL2005 -> SQL2008R2 verfügbar.
2) Warum sys.dm_exec_sql_text.dbid
hat (manchmal) NULLen ?
- Innerhalb von SQL2005 -> SQL2008R2
dbid
ist 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
dbid
gibt 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