Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

DMF sys.dm_exec_sql_text nie wyświetla DBID

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę przekonwertować funkcję split na inline table o wartości udf w serwerze SQL?

  2. Dlaczego kolumna WHERE =NULL nie zgłasza błędu w programie SQL Server?

  3. Uzyskanie minimum dwóch wartości w SQL

  4. Używanie kreatora importu do importowania danych z Excela do tabeli w SQL Server 2012 nie powiodło się - obcięcie tekstu

  5. Wydajna obsługa wielu opcjonalnych ograniczeń w miejscu, w którym klauzula