Share via


sp_get_query_template

パラメータ化形式のクエリを返します。返される結果は、強制パラメータ化から返されるパラメータ化形式のクエリに似ています。sp_get_query_template は、主に TEMPLATE プラン ガイドの作成時に使用します。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

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

引数

  • 'query_text'
    パラメータ化バージョンを生成する基となるクエリです。'query_text' は、単一引用符で囲み、前に Unicode を指定する N を付ける必要があります。N'query_text' は、@querytext パラメータに割り当てられる値です。これは nvarchar(max) 型です。
  • @templatetext
    nvarchar(max) 型の出力パラメータです。指定したとおりに提供され、パラメータ化形式の query_text を文字列リテラルとして受け取ります。
  • @parameters
    nvarchar(max) 型の出力パラメータです。指定したとおりに提供され、@templatetext でパラメータ化されたパラメータ名とデータ型の文字列リテラルを受け取ります。

解説

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

  • パラメータ化する定数リテラル値が query_text に 1 つもありません。
  • query_text が、NULL であるか、Unicode 文字列でないか、構文が正しくないか、コンパイルできないかのいずれかです。

sp_get_query_template によってエラーが返された場合、@templatetext 出力パラメータおよび @parameters 出力パラメータの値は変更されません。

権限

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

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

USE AdventureWorks;
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
ms186908.note(ja-jp,SQL.90).gifメモ :
sp_get_query_template の出力内のパラメータの順序と名前は、Quick Fix Engineering、Service Pack、および SQL Server のバージョンのアップグレードによって変化する可能性があります。アップグレードによって、同じクエリに対して異なる定数リテラル群がパラメータ化されるようになったり、両方の出力パラメータの結果に使用される文字間隔が変化したりする可能性もあります。

参照

関連項目

システム ストアド プロシージャ (Transact-SQL)
データベース エンジンのストアド プロシージャ (Transact-SQL)

その他の技術情報

プラン ガイドを使用したクエリのパラメータ化動作の指定
パラメータ化クエリのプラン ガイドの設計

ヘルプおよび情報

SQL Server 2005 の参考資料の入手