次の方法で共有


sys.fn_stmt_sql_handle_from_sql_stmt(Transact-SQL)

対象者:SQL Server 2016 (13.x) およびそれ以降のバージョン Azure SQL DatabaseAzure SQL Managed InstanceSQL Database in Microsoft Fabric

指定されたパラメーター化型 (単純または強制) の Transact-SQL ステートメントの stmt_sql_handle を取得します。 テキストがわかっている場合は、その stmt_sql_handle を使用して、クエリ ストアに格納されているクエリを参照できます。

Transact-SQL 構文表記規則

構文

sys.fn_stmt_sql_handle_from_sql_stmt
(
    N'query_sql_text'
    , [ query_param_type ]
)
[ ; ]

引数

query_sql_text

ハンドルが必要なクエリ ストア内のクエリのテキスト。 query_sql_textnvarchar(max) で、既定値はありません。

query_param_type

クエリのパラメーター型。 query_param_typetinyint で、既定値は NULL です。 次のいずれかの値になります。

価値 説明
NULL (既定値) 既定値は 0 です
0 None
1 ユーザー
2 Simple
3 強制的

返される列

次の表に、 sys.fn_stmt_sql_handle_from_sql_stmt 返される列の一覧を示します。

列名 タイプ 説明
statement_sql_handle varbinary(64) SQL ハンドル。
query_sql_text nvarchar(max) Transact-SQL ステートメントのテキスト。
query_parameterization_type tinyint クエリパラメーター化の型。

リターン コードの値

0 (成功) または 1 (失敗)。

アクセス許可

データベース EXECUTE 権限と、クエリ ストア カタログ ビューに対する DELETE 権限が必要です。

次の例では、ステートメントを実行し、 sys.fn_stmt_sql_handle_from_sql_stmt を使用してそのステートメントの SQL ハンドルを返します。

SELECT *
FROM sys.databases;

SELECT *
FROM sys.fn_stmt_sql_handle_from_sql_stmt('SELECT * FROM sys.databases', NULL);

この関数を使用して、クエリ ストアデータを他の動的管理ビューと関連付けます。 次のような例です。

SELECT qt.query_text_id,
       q.query_id,
       qt.query_sql_text,
       qt.statement_sql_handle,
       q.context_settings_id,
       qs.statement_context_id
FROM sys.query_store_query_text AS qt
     INNER JOIN sys.query_store_query AS q
         ON qt.query_text_id = q.query_text_id
CROSS APPLY sys.fn_stmt_sql_handle_from_sql_stmt(qt.query_sql_text, NULL) AS fn_handle_from_stmt
     INNER JOIN sys.dm_exec_query_stats AS qs
         ON fn_handle_from_stmt.statement_sql_handle = qs.statement_sql_handle;