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