sp_prepare (Transact SQL)
Область применения: SQL Server Управляемый экземпляр SQL Azure Azure Synapse Analytics Analytics Platform System (PDW)
Подготавливает параметризованную инструкцию Transact-SQL и возвращает дескриптор инструкции для выполнения. sp_prepare
вызывается путем ID = 11
указания в пакете табличного потока данных (TDS).
Соглашения о синтаксисе Transact-SQL
Синтаксис
sp_prepare
handle OUTPUT
, params
, stmt
, options
[ ; ]
Аргументы
ручка
Созданный идентификатор подготовленного дескриптора SQL Server. дескриптор является обязательным параметром с возвращаемым значением int .
params
Указывает параметризованные инструкции. params — это обязательный параметр OUTPUT, который вызывает значение ввода ntext, nchar или nvarchar . Определение параметров переменных заменено маркерами параметров в инструкции. Введите значение, NULL
если инструкция не параметризована.
stmt
Определяет результирующий набор курсора. Параметр stmt является обязательным и вызывает входное значение ntext, nchar или nvarchar .
options
Необязательный параметр, возвращающий описание столбцов результирующего набора курсора. для параметров требуется следующее входное значение:
значение | Описание |
---|---|
0x0001 |
RETURN_METADATA |
Примеры
А. Подготовка и выполнение инструкции
В следующем примере выполняется базовая инструкция Transact-SQL.
DECLARE @handle INT;
EXEC sp_prepare @handle OUTPUT,
N'@P1 NVARCHAR(128), @P2 NVARCHAR(100)',
N'SELECT database_id, name FROM sys.databases WHERE name=@P1 AND state_desc = @P2';
EXEC sp_execute @handle,
N'tempdb',
N'ONLINE';
EXEC sp_unprepare @handle;
B. Подготовка и выполнение инструкции с помощью дескриптора
В следующем примере выполняется подготовка инструкции AdventureWorks2022
в базе данных, а затем выполняется с помощью дескриптора.
-- Prepare query
DECLARE @handle INT;
EXEC sp_prepare @handle OUTPUT,
N'@Param INT',
N'SELECT *
FROM Sales.SalesOrderDetail AS sod
INNER JOIN Production.Product AS p ON sod.ProductID = p.ProductID
WHERE SalesOrderID = @Param
ORDER BY Style DESC;';
-- Return handle for calling application
SELECT @handle;
GO
Вот результирующий набор.
1
Дважды выполните запрос с помощью значения 1
дескриптора, прежде чем отменить подготовленный план.
EXEC sp_execute 1, 49879;
GO
EXEC sp_execute 1, 48766;
GO
EXEC sp_unprepare 1;
GO