sys.fn_get_sql (Transact-SQL)

適用於:SQL Server

傳回指定之 SQL 控制碼的 SQL 語句文字。

重要

未來的 Microsoft SQL Server 版本將移除這項功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 請改用sys.dm_exec_sql_text。 如需詳細資訊,請參閱 sys.dm_exec_sql_text (Transact-SQL)

Transact-SQL 語法慣例

語法

  
sys.fn_get_sql ( SqlHandle )  

引數

SqlHandle
這是控制碼值。 SqlHandle Varbinary(64), 沒有預設值。

傳回的資料表

資料行名稱 資料類型 描述
dbid smallint 資料庫識別碼。 對於隨選和準備的 SQL 陳述式而言,則為編譯陳述式的資料庫識別碼。
objectid int 資料庫物件的識別碼。 這是臨機操作 SQL 語句的 Null。
number smallint 如果已分組程式,則表示群組的數目。

0 = 專案不是程式。

Null = 臨機操作 SQL 語句。
encrypted bit 指出物件是否已加密。

0 = 未加密

1 = 已加密
text text 這是 SQL 語句的文字。 這是加密物件的 Null。

備註

您可以從 sys.dm_exec_requests (Transact-SQL) 動態管理檢視的 sql_handle 資料行取得有效的 SQL 控制碼。

如果您傳遞的控制碼已不存在於快取中,fn_get_sq l 會傳回空的結果集。 如果您傳遞不正確控制碼,批次會停止,並傳回錯誤訊息。

SQL Server 資料庫引擎無法快取某些 Transact-SQL 語句,例如具有大於 8 KB 之字串常值的大量複製語句和語句。 無法使用 fn_get_sql 擷取這些語句的控制碼。

結果 集的文字 資料行會篩選出可能包含密碼的文字。 如需未受監視之安全性相關預存程式的詳細資訊,請參閱 篩選追蹤

fn_get_sql函式會傳回類似 DBCC INPUTBUFFER 命令的資訊。 以下是可以使用 fn_get_sql 函式的範例,因為 DBCC INPUTBUFFER 不能:

  • 當事件超過 255 個字元時。

  • 當您必須傳回預存程式目前最高的巢狀層級時。 例如,有兩個預存程式名為 sp_1 和 sp_2。 如果sp_1呼叫 sp_2,而且您在執行sp_2時從sys.dm_exec_requests動態管理檢視取得控制碼,則fn_get_sql函式會傳回sp_2的相關資訊。 此外,fn_get_sql函式會傳回目前最高巢狀層級預存程式的完整文字。

權限

使用者需要伺服器上的 VIEW SERVER STATE 許可權。

範例

資料庫管理員可以使用 fn_get_sql 函式,如下列範例所示,協助診斷問題處理常式。 系統管理員識別問題會話識別碼之後,系統管理員可以擷取該會話的 SQL 控制碼、使用控制碼呼叫fn_get_sql,然後使用開始和結束位移來判斷問題會話識別碼的 SQL 文字。

DECLARE @Handle varbinary(64);  
SELECT @Handle = sql_handle   
FROM sys.dm_exec_requests   
WHERE session_id = 52 and request_id = 0;  
SELECT * FROM sys.fn_get_sql(@Handle);  
GO  

另請參閱

DBCC INPUTBUFFER (Transact-SQL)
sys.sysprocesses (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)