sql >> Base de Datos >  >> RDS >> Sqlserver

DMF sys.dm_exec_sql_text no muestra DBID

1) Este comportamiento está disponible en SQL2005 -> SQL2008R2.

2) Por qué sys.dm_exec_sql_text.dbid tiene (a veces) NULL?

  • Dentro de SQL2005 -> SQL2008R2 dbid es NULL "para instrucciones SQL ad hoc y preparadas" (consulte MSDN para Servidor SQL 2008 R2 ).
  • Dentro de SQL 2012 "Para sentencias SQL ad hoc y preparadas, el ID de la base de datos donde se compilaron las sentencias" (ver MSDN ). Entonces, a partir de SQL2012 dbid devolverá un valor no NULL que incluye "sentencias SQL ad hoc y preparadas".

3) Para resolver este problema en SQL2008 -> SQL2008R2 utilicé sys.dm_exec_plan_attributes (ver 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