1) この動作は SQL2005 -> SQL2008R2 で利用可能です。
2) sys.dm_exec_sql_text.dbid
の理由 (時々)NULLがありますか?
- SQL2005 内 -> SQL2008R2
dbid
「アドホックおよび準備済み SQL ステートメントの場合」は NULL です (SQL Server 2008 R2 )。 - SQL 2012 内で「アドホックおよび準備済み SQL ステートメントの場合、ステートメントがコンパイルされたデータベースの ID」(MSDN
)。したがって、SQL2012
dbid
から開始します。 「アドホックおよび準備済み SQL ステートメント」を含む NULL 以外の値を返します。
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