次の方法で共有


sp_get_query_template (Transact-SQL)

適用対象: SQL サーバー

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

Transact-SQL 構文表記規則

構文

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

引数

'query_text'
パラメーター化されたバージョンを生成するクエリです。 'query_text' は単一引用符で囲み、その前に N 個の Unicode 指定子を付ける必要があります。 N'query_text' は、 @querytext パラメーターに割り当てられた値です。 これは nvarchar(max)型です。

@templatetext
query_textのパラメーター化された形式文字列リテラルとして受け取るために指定された、nvarchar(max)の出力パラメーターです。

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

解説

sp_get_query_template は、以下のことが発生した場合にエラーを返します。

  • query_text内の定数リテラル値はパラメーター化されません。

  • query_text は NULL であり、Unicode 文字列ではなく、構文的に無効であるか、コンパイルできません。

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

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

@0 int  

Note

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

参照

システム ストアド プロシージャ (Transact-SQL)
データベース エンジン ストアド プロシージャ (Transact-SQL)
プラン ガイドを使用したクエリのパラメーター化動作の指定