sys.fn_stmt_sql_handle_from_sql_stmt (Transact-SQL)

适用于: SQL Server 2016 (13.x) 及更高版本 Azure SQL 数据库Azure SQL 托管实例

获取给定参数化类型(简单或强制)下 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_text是 nvarchar(max),没有默认值。

query_param_type
查询的参数类型。 query_param_type是个小小的。 可能的值为:

  • NULL - 默认值为 0

  • 0 - None

  • 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;

另请参阅