Поделиться через


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