fn_get_sql (Transact-SQL)

指定した SQL ハンドルに対して、SQL ステートメントのテキストを返します。

トピック リンク アイコンTransact-SQL 構文表記規則

ms189451.note(ja-jp,SQL.90).gif重要 :
この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。代わりに sys.dm_exec_sql_text を使用してください。詳細については、「sys.dm_exec_sql_text」を参照してください。

構文

fn_get_sql ( SqlHandle )

引数

SqlHandle

ハンドル値を指定します。SqlHandle のデータ型は varbinary(64) で、既定値はありません。

解説

有効な SQL ハンドルは、sys.dm_exec_requests 動的管理ビューの sql_handle 列から取得できます。

キャッシュに存在しなくなったハンドルを渡すと、fn_get_sql では空の結果セットが返されます。無効なハンドルを渡すと、バッチは停止し、エラー メッセージが返されます。

Microsoft SQL Server 2005 データベース エンジン では、一括コピー ステートメントや、8 KB より大きい文字列リテラルを含むステートメントなど、一部の Transact-SQL ステートメントをキャッシュできません。このようなステートメントに対するハンドルは、fn_get_sql では取得できません。

結果セットの text 列は、パスワードを含む可能性があるテキストに対してはフィルタ処理されます。監視されないセキュリティ関連のストアド プロシージャの詳細については、「トレースへのフィルタの適用」を参照してください。

fn_get_sql 関数では、DBCC INPUTBUFFER コマンドと同様の情報が返されます。次は、DBCC INPUTBUFFER を使用できず、fn_get_sql 関数を使用できる場合の例です。

  • イベントの文字数が 255 文字を超える場合。
  • ストアド プロシージャに関する、現在の入れ子における最上位レベルの情報を返す必要がある場合。たとえば、sp_1sp_2 という名前の 2 つのストアド プロシージャがある場合に、sp_1sp_2 を呼び出し、sp_2 の実行中に sys.dm_exec_requests 動的管理ビューからハンドルを取得すると、fn_get_sql 関数では sp_2 に関する情報が返されます。さらに fn_get_sql 関数では、現在の入れ子の最上位レベルにあるストアド プロシージャの完全なテキストが返されます。

権限

サーバーに対する VIEW SERVER STATE 権限が必要です。

戻りテーブル

列名 データ型 説明

dbid

smallint

データベース ID。アドホック SQL ステートメントの場合は NULL になります。

objectid

int

データベースオブジェクトの ID。アドホック SQL ステートメントの場合は NULL になります。

number

smallint

プロシージャがグループ化されている場合、そのグループの番号。

0 = エントリはプロシージャではない

NULL = アドホック SQL ステートメント

encrypted

bit

オブジェクトが暗号化されているかどうかを示します。

0 = 暗号化されていない

1 = 暗号化されている

text

text

SQL ステートメントのテキスト。暗号化されているオブジェクトの場合は NULL になります。

データベース管理者は、次の例のように fn_get_sql 関数を使用して、問題があるプロセスを診断できます。この場合、まず問題がある session_id を特定した後、その session_id に対する SQL ハンドルを取得します。次にそのハンドルで fn_get_sql を呼び出した後、開始と終了オフセットを使用して、問題がある session_id の SQL ステートメントを確認します。

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

参照

関連項目

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

ヘルプおよび情報

SQL Server 2005 の参考資料の入手