1) To zachowanie jest dostępne w SQL2005 -> SQL2008R2.
2) Dlaczego sys.dm_exec_sql_text.dbid
ma (czasami) wartości NULL ?
- W ramach SQL2005 -> SQL2008R2
dbid
ma wartość NULL „dla ad hoc i przygotowanych instrukcji SQL” (zobacz MSDN dla SQL Server 2008 R2 ). - W programie SQL 2012 „W przypadku instrukcji SQL ad hoc i przygotowanych instrukcji SQL identyfikator bazy danych, w której zostały skompilowane instrukcje” (patrz MSDN
). Tak więc, począwszy od SQL2012
dbid
zwróci wartość inną niż NULL, w tym "ad hoc i przygotowane instrukcje SQL".
3) Aby rozwiązać ten problem w SQL2008 -> SQL2008R2 użyłem sys.dm_exec_plan_attributes
(zobacz 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