Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
Geeft de tekst terug van de SQL-batch die is geïdentificeerd door de gespecificeerde sql_handle. Deze tabelwaardige functie vervangt de systeemfunctie fn_get_sql.
Syntax
sys.dm_exec_sql_text(sql_handle | plan_handle)
Argumenten
sql_handle
Is een token dat uniek een batch identificeert die heeft uitgevoerd of momenteel uitvoert.
sql_handle is varbinair(64).
De sql_handle kan worden verkregen uit de volgende dynamische beheerobjecten:
plan_handle
Is een token dat uniek een query-uitvoeringsplan identificeert voor een batch die is uitgevoerd en waarvan het plan zich in de plancache bevindt, of momenteel uitvoert.
plan_handle is varbinair(64).
De plan_handle kan worden verkregen uit de volgende dynamische beheerobjecten:
Tabel geretourneerd
| Kolomnaam | Gegevenstype | Description |
|---|---|---|
| dbid | smallint | ID van database. Voor statische SQL in een opgeslagen procedure is de ID van de database die de opgeslagen procedure bevat. Anders null. |
| Object | int | ID van object. Is NULL voor ad hoc en voorbereide SQL-instructies. |
| number | smallint | Voor een genummerde opgeslagen procedure geeft deze kolom het nummer van de opgeslagen procedure terug. Voor meer informatie, zie sys.numbered_procedures (Transact-SQL). Is NULL voor ad hoc en voorbereide SQL-instructies. |
| Gecodeerde | bit | 1 = SQL-tekst is versleuteld. 0 = SQL-tekst is niet versleuteld. |
| tekst | nvarchar(max) | Tekst van de SQL-query. Is NULL voor versleutelde objecten. |
Permissions
Vereist VIEW SERVER STATE machtiging op de server.
Machtigingen voor SQL Server 2022 en hoger
Vereist VIEW SERVER PERFORMANCE STATE toestemming op de server.
Opmerkingen
Voor ad hoc-queries zijn de SQL-handles hashwaarden gebaseerd op de SQL-tekst die aan de server wordt gestuurd, en kunnen ze afkomstig zijn van elke database.
Voor databaseobjecten zoals opgeslagen procedures, triggers of functies worden de SQL-handles afgeleid van de database-ID, object-ID en objectnummer.
Plan handle is een hashwaarde die wordt afgeleid van het gecompileerde plan van de hele batch.
Note
dbid kan niet worden bepaald uit sql_handle voor ad hoc zoekopdrachten. Om dbid voor ad hoc-queries te bepalen, gebruik plan_handle in plaats daarvan.
Examples
A. Conceptueel voorbeeld
Het volgende is een basisvoorbeeld om te illustreren hoe je een sql_handle direct of met CROSS APPLY kunt halen.
Creëer activiteit.
Voer de volgende T-SQL uit in een nieuw queryvenster in SQL Server Management Studio.-- Identify current spid (session_id) SELECT @@SPID; GO -- Create activity WAITFOR DELAY '00:02:00';Gebruik CROSS APPLY.
De sql_handle van sys.dm_exec_requests worden doorgegeven aan sys.dm_exec_sql_text via CROSS APPLY. Open een nieuw queryvenster en geef de spid door die in stap 1 is geïdentificeerd. In dit voorbeeld is59de spid toevallig .SELECT t.* FROM sys.dm_exec_requests AS r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t WHERE session_id = 59 -- modify this value with your actual spidGeef sql_handle direct door.
Haal de sql_handle van sys.dm_exec_requests. Geef vervolgens de sql_handle direct aan sys.dm_exec_sql_text. Open een nieuw queryvenster en geef de spid die in stap 1 is geïdentificeerd door aan sys.dm_exec_requests. In dit voorbeeld is59de spid toevallig . Geef dan de teruggegeven sql_handle als argument aan sys.dm_exec_sql_text.-- acquire sql_handle SELECT sql_handle FROM sys.dm_exec_requests WHERE session_id = 59 -- modify this value with your actual spid -- pass sql_handle to sys.dm_exec_sql_text SELECT * FROM sys.dm_exec_sql_text(0x01000600B74C2A1300D2582A2100000000000000000000000000000000000000000000000000000000000000) -- modify this value with your actual sql_handle
B. Verkrijg informatie over de vijf belangrijkste zoekopdrachten op basis van gemiddelde CPU-tijd
Het volgende voorbeeld geeft de tekst van de SQL-instructie en de gemiddelde CPU-tijd voor de top vijf queries terug.
SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],
SUBSTRING(st.text, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
ORDER BY total_worker_time/execution_count DESC;
C. Verskaf batch-uitvoeringsstatistieken
Het volgende voorbeeld geeft de tekst van SQL-query's die in batches worden uitgevoerd terug en geeft statistische informatie hierover.
SELECT s2.dbid,
s1.sql_handle,
(SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 ,
( (CASE WHEN statement_end_offset = -1
THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2)
ELSE statement_end_offset END) - statement_start_offset) / 2+1)) AS sql_statement,
execution_count,
plan_generation_num,
last_execution_time,
total_worker_time,
last_worker_time,
min_worker_time,
max_worker_time,
total_physical_reads,
last_physical_reads,
min_physical_reads,
max_physical_reads,
total_logical_writes,
last_logical_writes,
min_logical_writes,
max_logical_writes
FROM sys.dm_exec_query_stats AS s1
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2
WHERE s2.objectid is null
ORDER BY s1.sql_handle, s1.statement_start_offset, s1.statement_end_offset;
Zie ook
Dynamische beheerweergaven en -functies (Transact-SQL)
uitvoeringsgerelateerde dynamische beheerweergaven en -functies (Transact-SQL)
sys.dm_exec_query_stats (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_cursors (Transact-SQL)
sys.dm_exec_xml_handles (Transact-SQL)
sys.dm_exec_query_memory_grants (Transact-SQL)
APPLY gebruiken
sys.dm_exec_text_query_plan (Transact-SQL)