Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

DMF sys.dm_exec_sql_text zeigt DBID nicht an

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