Udostępnij za pośrednictwem


sp_get_query_template (Transact-SQL)

Dotyczy:programu SQL Server

Zwraca sparametryzowaną formę zapytania. Wyniki zwrócone naśladują sparametryzowaną formę zapytania, które wynika z użycia wymuszonej parametryzacji. sp_get_query_template jest używana głównie podczas tworzenia przewodników planu TEMPLATE.

Transact-SQL konwencje składni

Składnia

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

Argumenty

Ważny

Argumenty dla rozszerzonych procedur składowanych należy wprowadzić w określonej kolejności zgodnie z opisem w sekcji składni. Jeśli parametry są wprowadzane poza kolejnością, wystąpi komunikat o błędzie.

[ @querytext = ] N'querytext'

Zapytanie, dla którego ma zostać wygenerowana sparametryzowana wersja. @querytext jest nvarchar(max)i musi być ujęty w pojedynczy cudzysłów i być poprzedzony specyfikatorem N Unicode.

@templatetext

Parametr OUTPUT typu nvarchar(max), podany zgodnie ze wskazaniem, aby otrzymać sparametryzowaną formę @querytext jako literał ciągu.

@parameters

Parametr wyjściowy typu nvarchar(max), podany zgodnie ze wskazaniem, aby otrzymać literał ciągu nazw parametrów i typów danych, które są sparametryzowane w @templatetext.

Uwagi

sp_get_query_template zwraca błąd, gdy wystąpią następujące elementy:

  • Nie parametryzuje żadnych wartości literałów stałych w @querytext.
  • @querytext jest NULL, a nie ciąg Unicode, składniowo nieprawidłowy lub nie można go skompilować.

Jeśli sp_get_query_template zwraca błąd, nie modyfikuje wartości parametrów @templatetext i @parameters wyjściowych.

Uprawnienia

Wymaga członkostwa w roli bazy danych publicznej.

Przykłady

Poniższy przykład zwraca sparametryzowaną formę zapytania zawierającego dwie stałe wartości literału.

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;

Poniżej przedstawiono sparametryzowane wyniki parametru @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

Pierwszy literał stałej, 2, jest konwertowany na parametr. Drugi literał, 400, nie jest konwertowany, ponieważ znajduje się wewnątrz klauzuli HAVING. Wyniki zwrócone przez sp_get_query_template naśladują sparametryzowaną formę zapytania, gdy opcja PARAMETERIZATIONALTER DATABASE jest ustawiona na FORCED.

Poniżej przedstawiono sparametryzowane wyniki parametru @my_parameters OUTPUT:

@0 int

Kolejność i nazewnictwo parametrów w danych wyjściowych sp_get_query_template mogą ulec zmianie między szybkimi poprawkami inżynieryjnymi, dodatkiem Service Pack i uaktualnieniami wersji programu SQL Server. Uaktualnienia mogą również spowodować sparametryzację innego zestawu literałów stałych dla tego samego zapytania i zastosowanie różnych odstępów w wynikach obu parametrów wyjściowych.