Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Vrátí text SQL dávkové části, která je identifikována zadaným sql_handle. Tato tabulková funkce nahrazuje systémovou funkci fn_get_sql.
Syntaxe
sys.dm_exec_sql_text(sql_handle | plan_handle)
Arguments
sql_handle
Je token, který jednoznačně identifikuje dávku, která byla vykonána nebo právě probíhá.
sql_handle je varbinární(64).
sql_handle lze získat z následujících dynamických řídících objektů:
plan_handle
Je token, který jednoznačně identifikuje plán provedení dotazu pro dávku, která byla vykonána a její plán se nachází v cache plánu, nebo je právě vykonává.
plan_handle je varbinary(64).
Plan_handle lze získat z následujících objektů dynamické správy:
Vrácená tabulka
| Název sloupce | Datový typ | Description |
|---|---|---|
| dbid | smallint | ID databáze. Pro statický SQL v uložené procedurě ID databáze obsahující uloženou proceduru. V opačném případě je null. |
| ID objektu | int | ID objektu. Je NULL pro ad hoc a připravené SQL příkazy. |
| number | smallint | Pro číslovanou uloženou proceduru tento sloupec vrací číslo uložené procedury. Pro více informací viz sys.numbered_procedures (Transact-SQL). Je NULL pro ad hoc a připravené SQL příkazy. |
| zakódovaný | bit | 1 = SQL text je šifrován. 0 = SQL text není šifrován. |
| text | nvarchar(max) | Text SQL dotazu. Je NULL pro šifrované objekty. |
Povolení
Vyžaduje VIEW SERVER STATE oprávnění na serveru.
Oprávnění pro SQL Server 2022 a novější
Vyžaduje oprávnění ZOBRAZIT STAV VÝKONU SERVERU na serveru.
Poznámky
Pro ad hoc dotazy jsou SQL handles hashovací hodnoty založené na SQL textu odeslaném serveru a mohou pocházet z jakékoli databáze.
U databázových objektů, jako jsou uložené procedury, triggery nebo funkce, jsou SQL handles odvozeny z ID databáze, ID objektu a čísla objektu.
Handle plánu je hash hodnota odvozená z kompilovaného plánu celé dávky.
Poznámka:
Dbid nelze určit z sql_handle pro ad hoc dotazy. Pro určení dbid pro ad hoc dotazy použijte místo toho plan_handle .
Examples
A. Konceptuální příklad
Následuje základní příklad pro ilustraci předání sql_handle buď přímo, nebo pomocí CROSS APPLY.
Vytvářejte aktivitu.
Spuskutěte následující T-SQL v novém dotazovacím okně v SQL Server Management Studio.-- Identify current spid (session_id) SELECT @@SPID; GO -- Create activity WAITFOR DELAY '00:02:00';Používám CROSS APPLY.
sql_handle z sys.dm_exec_requests bude předán sys.dm_exec_sql_text pomocí CROSS APPLY. Otevřete nové okno dotazu a pošlete SPID identifikovaný v kroku 1. V tomto příkladu je spid .59SELECT 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 spidPřímo sql_handle předávám.
Získejte sql_handle od sys.dm_exec_requests. Pak sql_handle předejte přímo sys.dm_exec_sql_text. Otevřete nové okno dotazu a pošlete spid identifikovaného v kroku 1 na sys.dm_exec_requests. V tomto příkladu je spid .59Pak vrácený sql_handle předám jako argument 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. Získejte informace o pěti nejčastějších dotazech podle průměrného času CPU
Následující příklad vrací text SQL příkazu a průměrný čas CPU pro pět nejčastějších dotazů.
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. Poskytnout statistiky dávkového provádění
Následující příklad vrací text SQL dotazů, které jsou prováděny v dávkách, a poskytuje o nich statistické informace.
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;
Viz také
Zobrazení a funkce dynamické správy (Transact-SQL)
zobrazení a funkce související se spouštěním dynamické správy (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)
Použití APPLY
sys.dm_exec_text_query_plan (Transact-SQL)