1) Това поведение е налично в SQL2005 -> SQL2008R2.
2) Защо sys.dm_exec_sql_text.dbid
има (понякога) NULL?
- В рамките на SQL2005 -> SQL2008R2
dbid
е NULL „за ad hoc и подготвени SQL изрази“ (вижте MSDN за SQL Server 2008 R2 ). - В рамките на SQL 2012 „За ad hoc и подготвени SQL изрази, идентификаторът на базата данни, където са компилирани изразите“ (вижте MSDN
). И така, започвайки от SQL2012
dbid
ще върне различна от NULL стойност, включително "ad hoc и подготвени SQL изрази".
3) За да разреша този проблем в SQL2008 -> SQL2008R2 използвах sys.dm_exec_plan_attributes
(вижте 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