fn_get_sql (Transact-SQL)
指定した SQL ハンドルに対して、SQL ステートメントのテキストを返します。
重要 : |
---|
この機能は、将来のバージョンの 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_1 と sp_2 という名前の 2 つのストアド プロシージャがある場合に、sp_1 で sp_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)