次の方法で共有


sys.fn_stmt_sql_handle_from_sql_stmt (Transact-SQL)

適用対象: SQL Server 2016 (13.x) 以降 Azure SQL Database Azure SQL Managed Instance

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

Transact-SQL 構文表記規則

構文

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

引数

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

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

  • NULL - 既定値は 0

  • 0 - なし

  • 1 - ユーザー

  • 2 - シンプル

  • 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
JOIN sys.query_store_query AS q
    ON qt.query_text_id = q.query_id
CROSS APPLY sys.fn_stmt_sql_handle_from_sql_stmt (qt.query_sql_text, null) AS fn_handle_from_stmt
JOIN sys.dm_exec_query_stats AS qs
    ON fn_handle_from_stmt.statement_sql_handle = qs.statement_sql_handle;

関連項目