Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

DMF sys.dm_exec_sql_text não mostrando DBID


1) Este comportamento está disponível em SQL2005 -> SQL2008R2.

2) Por que sys.dm_exec_sql_text.dbid tem (às vezes) NULLs?
  • No SQL2005 -> SQL2008R2 dbid é NULL "para instruções SQL ad hoc e preparadas" (consulte MSDN para SQL Server 2008 R2 ).
  • No SQL 2012 "Para instruções SQL ad hoc e preparadas, o ID do banco de dados onde as instruções foram compiladas" (consulte MSDN ). Então, a partir do SQL2012 dbid retornará um valor não NULL, incluindo "instruções SQL ad hoc e preparadas".

3) Para resolver esse problema no SQL2008 -> SQL2008R2 usei sys.dm_exec_plan_attributes (consulte 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