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' должен быть заключен в одинарные кавычки и предваряться указателем Юникода (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 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
, преобразуется в параметр. Второй литерал 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)
Другие ресурсы
Указание механизма параметризации запросов с помощью руководств плана
Конструирование руководств планов для параметризованных запросов