适用范围:SQL Server
返回参数化格式的查询。 返回的结果模拟使用强制参数化得到的参数化格式的查询。
sp_get_query_template
主要用于创建 TEMPLATE
计划指南。
语法
sp_get_query_template
[ @querytext = ] N'querytext'
, @templatetext OUTPUT
, @parameters OUTPUT
[ ; ]
参数
重要
扩展存储过程的参数必须按特定顺序输入,如 语法 节中所述。 如果参数按顺序输入,则会出现错误消息。
[ @querytext = ] N'querytext'
要为其生成参数化版本的查询。
@querytext为 nvarchar(max),并且必须用单引号括起来,并且前面有 N
Unicode 说明符。
@templatetext
nvarchar(max)类型的 OUTPUT 参数(如指示)提供,以接收字符串文本形式的@querytext参数化形式。
@parameters
nvarchar(max)类型的输出参数(如所指示)提供,用于接收参数名称和数据类型在@templatetext中参数化的字符串文本。
注解
sp_get_query_template
发生以下情况时返回错误:
- 它不会参数化@querytext中的任何常量文本值。
-
@querytext 不是
NULL
Unicode 字符串、语法无效或无法编译。
如果sp_get_query_template
返回错误,则不会修改@templatetext@parameters。
权限
需要公共数据库角色的成员身份。
示例
以下示例返回包含两个常量文字值的参数化格式的查询。
USE AdventureWorks2022;
GO
DECLARE @my_templatetext NVARCHAR(MAX);
DECLARE @my_parameters NVARCHAR(MAX);
EXEC sp_get_query_template N'SELECT pi.ProductID, SUM(pi.Quantity) AS Total
FROM Production.ProductModel pm
INNER JOIN Production.ProductInventory pi
ON pm.ProductModelID = pi.ProductID
WHERE pi.ProductID = 2
GROUP BY pi.ProductID, pi.Quantity
HAVING SUM(pi.Quantity) > 400',
@my_templatetext OUTPUT,
@my_parameters OUTPUT;
SELECT @my_templatetext;
SELECT @my_parameters;
下面是 @my_templatetext OUTPUT
参数的参数化结果:
select pi . ProductID , SUM ( pi . Quantity ) as Total
from Production . ProductModel pm
inner join Production . ProductInventory pi
on pm . ProductModelID = pi . ProductID
where pi . ProductID = @0
group by pi . ProductID , pi . Quantity
having SUM ( pi . Quantity ) > 400
第一个常量文本 2
转换为参数。 第二个400
文本HAVING
不会转换,因为它位于子句内。 当选项sp_get_query_template
设置为 PARAMETERIZATION
时ALTER DATABASE
,模拟查询的参数化形式返回FORCED
的结果。
下面是 @my_parameters OUTPUT
参数的参数化结果:
@0 int
在 SQL sp_get_query_template
Server 的快速修复工程、Service Pack 和版本升级之间,参数的顺序和命名可能会更改。 另外,升级会导致同一查询的不同的常量文字集被参数化,并且对两种输出参数的结果应用不同的文本间距。