sp_get_query_template (Transact-SQL)

Применимо к:SQL Server

Возвращает запрос в параметризованной форме. Возвращаемые результаты имитируют параметризованную форму запроса, получаемую в результате принудительной параметризации. 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 возвращает ошибку, он не изменяет значения параметров и @parameters выходных @templatetext параметров.

Разрешения

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

Примеры

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

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  

Заметка

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

См. также

Системные хранимые процедуры (Transact-SQL)
Хранимые процедуры ядра СУБД (Transact-SQL)
Указание механизма параметризации запросов с помощью структур плана