sp_get_query_template (Transact-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. N'query_text' — значение, присваиваемое параметру @querytext и имеющее тип nvarchar(max).

  • @templatetext
    Выходной параметр типа nvarchar(max), предназначенный для получения параметризованной формы query_text в виде строкового литерала.

  • @parameters
    Выходной параметр типа nvarchar(max), в который возвращается строковый литерал, содержащий имена параметров и типы данных, которые были параметризованы в @templatetext.

Замечания

Процедура sp_get_query_template возвращает ошибку, если:

  • В аргументе query_text невозможно параметризовать ни одно литеральное значение константы.

  • Аргумент query_text содержит не строку в Юникоде, а значение NULL, синтаксически неверен или не может быть скомпилирован.

Если хранимая процедура sp_get_query_template возвращает ошибку, значения выходных параметров @templatetext и @parameters не изменяются.

Разрешения

Требует членства в роли базы данных public.

Примеры

В следующем примере выдается параметризованная форма запроса, в котором содержатся два литеральных значения константы.

USE AdventureWorks2008R2;
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_templatetextOUTPUT:

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 . Количество

having SUM ( pi . Quantity ) > 400

Обратите внимание, что первая константа, 2, преобразуется в параметр. Второй литерал, 400, в параметр не преобразуется, так как он содержится внутри предложения HAVING. Результаты, возвращенные sp_get_query_template, имитируют параметризованную форму запроса, если параметр PARAMETERIZATION инструкции ALTER DATABASE установлен в FORCED. Сведения о том, какие из переменных подвергаются параметризации, см. в разделе Принудительная параметризация.

Ниже приведены параметризованные результаты в аргументе @my_parameters OUTPUT:

@0 int
ПримечаниеПримечание

Порядок и имена параметров, возвращаемых из процедуры sp_get_query_template, могут измениться при наложении исправлений, пакетов обновлений и обновлениях версий SQL Server. Обновление версии может также стать причиной получения отличающегося набора параметризуемых констант для того же запроса и изменения формата выдачи результатов для обоих выходных параметров.