Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Returnerar texten från SQL-batchen som identifieras av den angivna sql_handle. Denna tabellvärda funktion ersätter systemfunktionen fn_get_sql.
Syntax
sys.dm_exec_sql_text(sql_handle | plan_handle)
Arguments
sql_handle
Är en token som unikt identifierar en batch som har exekverats eller för närvarande körs.
sql_handle är varbinär(64).
sql_handle kan erhållas från följande dynamiska hanteringsobjekt:
plan_handle
Är en token som unikt identifierar en frågeexekveringsplan för en batch som har körts och vars plan finns i plancachen, eller för närvarande körs.
plan_handle är varbinary(64).
Plan_handle kan hämtas från följande dynamiska hanteringsobjekt:
Tabell returnerad
| Kolumnnamn | Datatyp | Description |
|---|---|---|
| dbid | smallint | ID på databasen. För statisk SQL i en lagrad procuredo är ID:t för databasen som innehåller den lagrade proceduren. Null annars. |
| Objekt-ID | int | Föremålets ID. Är NULL för ad hoc- och förberedda SQL-satser. |
| number | smallint | För en numrerad lagrad procedur returnerar denna kolumn numret för den lagrade proceduren. För mer information, se sys.numbered_procedures (Transact-SQL). Är NULL för ad hoc- och förberedda SQL-satser. |
| krypterade | bit | 1 = SQL-text är krypterad. 0 = SQL-text är inte krypterad. |
| text | nvarchar(max) | Text av SQL-frågan. Är NULL för krypterade objekt. |
Permissions
Kräver VIEW SERVER STATE behörighet på servern.
Behörigheter för SQL Server 2022 och senare
Kräver BEHÖRIGHET FÖR VISNINGSSERVERNS PRESTANDATILLSTÅND på servern.
Anmärkningar
För ad hoc-frågor är SQL-handtagen hashvärden baserade på SQL-texten som skickas till servern, och kan komma från vilken databas som helst.
För databasobjekt såsom lagrade procedurer, triggers eller funktioner härleds SQL-handtagen från databasens ID, objekt-ID och objektnummer.
Planhandtag är ett hashvärde som härleds från den kompilerade planen för hela batchen.
Anmärkning
dbid kan inte bestämmas utifrån sql_handle för ad hoc-frågor. För att bestämma dbid för ad hoc-frågor, använd istället plan_handle .
Examples
A. Konceptuellt exempel
Följande är ett grundläggande exempel för att illustrera att man kan klara en sql_handle antingen direkt eller med CROSS APPLY.
Skapa aktivitet.
Exekvera följande T-SQL i ett nytt frågefönster i SQL Server Management Studio.-- Identify current spid (session_id) SELECT @@SPID; GO -- Create activity WAITFOR DELAY '00:02:00';Använder CROSS APPLY.
sql_handle från sys.dm_exec_requests kommer att skickas till sys.dm_exec_sql_text med hjälp av CROSS APPLY. Öppna ett nytt frågefönster och skicka den spid som identifierades i steg 1. I detta exempel råkar spiden vara59.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 spidAtt skicka sql_handle direkt.
Skaffa sql_handle från sys.dm_exec_requests. Skicka sedan sql_handle direkt till sys.dm_exec_sql_text. Öppna ett nytt frågefönster och skicka spiden som identifierades i steg 1 till sys.dm_exec_requests. I detta exempel råkar spiden vara59. Sedan skickar du tillbaka sql_handle som argument till 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. Få information om de fem vanligaste frågorna efter genomsnittlig CPU-tid
Följande exempel returnerar texten till SQL-satsen och genomsnittlig CPU-tid för de fem vanligaste frågorna.
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. Tillhandahålla statistik för batchexekvering
Följande exempel returnerar texten från SQL-frågor som körs i batchar och ger statistisk information om dem.
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;
Se även
Vyer och funktioner för dynamisk hantering (Transact-SQL)
Körningsrelaterade vyer och funktioner för dynamisk hantering (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)
Använder APPLY
sys.dm_exec_text_query_plan (Transact-SQL)