Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

DMF sys.dm_exec_sql_text n'affiche pas le DBID

1) Ce comportement est disponible dans SQL2005 -> SQL2008R2.

2) Pourquoi sys.dm_exec_sql_text.dbid a (parfois) NULL ?

  • Dans SQL2005 -> SQL2008R2 dbid est NULL "pour les instructions SQL ad hoc et préparées" (voir MSDN pour SQL Server 2008 R2 ).
  • Dans SQL 2012 "Pour les instructions SQL ad hoc et préparées, l'ID de la base de données dans laquelle les instructions ont été compilées" (voir MSDN ). Donc, à partir de SQL2012 dbid renverra une valeur non NULL incluant des "instructions SQL ad hoc et préparées".

3) Pour résoudre ce problème dans SQL2008 -> SQL2008R2 j'ai utilisé sys.dm_exec_plan_attributes (voir 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