Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

DMF sys.dm_exec_sql_text không hiển thị DBID

1) Hành vi này có sẵn trong SQL2005 -> SQL2008R2.

2) Tại sao sys.dm_exec_sql_text.dbid có (đôi khi) NULL?

  • Trong SQL2005 -> SQL2008R2 dbid là NULL "cho các câu lệnh SQL đặc biệt và chuẩn bị" (xem MSDN cho SQL Server 2008 R2 ).
  • Trong SQL 2012 "Đối với các câu lệnh SQL đặc biệt và chuẩn bị sẵn, ID của cơ sở dữ liệu nơi các câu lệnh được biên dịch" (xem MSDN ). Vì vậy, bắt đầu từ SQL2012 dbid sẽ trả về giá trị không phải NULL, bao gồm "các câu lệnh SQL đặc biệt và đã chuẩn bị".

3) Để giải quyết vấn đề này trong SQL2008 -> SQL2008R2, tôi đã sử dụng sys.dm_exec_plan_attributes (xem 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Biết khi nào cần thử lại hoặc không thành công khi gọi SQL Server từ C #?

  2. nvarchar (tối đa) so với NText

  3. Sử dụng RAND () trong Hàm do Người dùng Xác định

  4. Cách tạo khóa ngoại tổng hợp trong SQL Server (Ví dụ T-SQL)

  5. Sự khác biệt giữa datetime và timestamp trong sqlserver?