Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
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)