Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

DMF sys.dm_exec_sql_text non mostra il DBID

1) Questo comportamento è disponibile in SQL2005 -> SQL2008R2.

2) Perché sys.dm_exec_sql_text.dbid ha (a volte) NULL?

  • All'interno di SQL2005 -> SQL2008R2 dbid è NULL "per istruzioni SQL preparate e ad hoc" (vedi MSDN per SQL Server 2008 R2 ).
  • In SQL 2012 "Per istruzioni SQL preparate e ad hoc, l'ID del database in cui sono state compilate le istruzioni" (vedi MSDN ). Quindi, a partire da SQL2012 dbid restituirà un valore non NULL che include "istruzioni SQL preparate e ad hoc".

3) Per risolvere questo problema in SQL2008 -> SQL2008R2 ho usato sys.dm_exec_plan_attributes (vedi 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