1) Perilaku ini tersedia di SQL2005 -> SQL2008R2.
2) Mengapa sys.dm_exec_sql_text.dbid
memiliki (kadang-kadang) NULL ?
- Dalam SQL2005 -> SQL2008R2
dbid
adalah NULL "untuk ad hoc dan pernyataan SQL yang disiapkan" (lihat MSDN untuk SQL Server 2008 R2 ). - Dalam SQL 2012 "Untuk pernyataan SQL ad hoc dan yang disiapkan, ID database tempat pernyataan dikompilasi" (lihat MSDN
). Jadi, mulai dari SQL2012
dbid
akan mengembalikan nilai non-NULL termasuk "pernyataan SQL ad hoc dan siap".
3) Untuk mengatasi masalah ini di SQL2008 -> SQL2008R2 saya menggunakan sys.dm_exec_plan_attributes
(lihat 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