sys.fn_stmt_sql_handle_from_sql_stmt(Transact-SQL)

适用于: SQL Server 2016 (13.x) 及以后版本 Azure SQL 数据库Azure SQL Managed InstanceMicrosoft Fabric 中的 SQL 数据库

获取 stmt_sql_handle 给定参数化类型(简单或强制)下的 Transact-SQL 语句。 可以使用查询存储中存储的查询了解其 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;