次の方法で共有


sp_get_query_template (Transact-SQL)

適用対象: SQL Server

クエリのパラメーター化された形式を返します。 返される結果は、強制パラメーター化を使用したクエリのパラメーター化された形式を模倣します。 sp_get_query_template は、主にプラン ガイド TEMPLATE 作成するときに使用されます。

Transact-SQL 構文表記規則

構文

sp_get_query_template
   [ @querytext = ] N'querytext'
   , @templatetext OUTPUT
   , @parameters OUTPUT
[ ; ]

引数

[ @querytext = ] N'querytext'

パラメーター化されたバージョンを生成するクエリ。 @querytextnvarchar(max)であり、単一引用符で囲み、その前に N Unicode 指定子を付ける必要があります。

@templatetext

@querytextのパラメーター化された形式を文字列リテラルとして受け取るために指定された、nvarchar(max) 型の OUTPUT パラメーター。

@parameters

@templatetextでパラメーター化パラメーター名とデータ型の文字列リテラルを受け取る、指定されたnvarchar(max)型の出力パラメーター。

解説

sp_get_query_template は、次の場合にエラーを返します。

  • @querytextの定数リテラル値はパラメーター化されません。
  • @querytext は、Unicode 文字列ではなく NULL、構文的に無効であるか、コンパイルできません。

sp_get_query_templateがエラーを返した場合、@templatetextと@parameters出力パラメーターの値は変更されません。

アクセス許可

public データベース ロールのメンバーシップが必要です。

次の例では、2 つの定数リテラル値が含まれたパラメーター化形式のクエリが返されます。

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) はパラメーターに変換されます。 2 番目のリテラル ( 400) は、 HAVING 句内にあるため、変換されません。 ALTER DATABASEPARAMETERIZATION オプションがFORCEDに設定されている場合、sp_get_query_templateによって返される結果は、クエリのパラメーター化された形式を模倣します。

@my_parameters OUTPUT パラメーターのパラメーター化された結果を次に示します。

@0 int

sp_get_query_templateの出力におけるパラメーターの順序と名前付けは、SQL Server のクイック修正エンジニアリング、サービス パック、バージョン アップグレードの間で変わる可能性があります。 アップグレードすると、同じクエリに対して異なる定数リテラルのセットがパラメーター化され、両方の出力パラメーターの結果に異なる間隔が適用される場合もあります。