Редагувати

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


sp_prepare (Transact SQL)

Applies to: SQL Server Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Prepares a parameterized Transact-SQL statement and returns a statement handle for execution. sp_prepare is invoked by specifying ID = 11 in a tabular data stream (TDS) packet.

Transact-SQL syntax conventions

Syntax

sp_prepare
    handle OUTPUT
    , params
    , stmt
    , options
[ ; ]

Arguments

handle

A SQL Server-generated prepared handle identifier. handle is a required parameter with an int return value.

params

Identifies parameterized statements. params is a required OUTPUT parameter that calls for an ntext, nchar, or nvarchar input value. The params definition of variables is substituted for parameter markers in the statement. Input a NULL value if the statement isn't parameterized.

stmt

Defines the cursor result set. The stmt parameter is required and calls for an ntext, nchar, or nvarchar input value.

options

An optional parameter that returns a description of the cursor result set columns. options requires the following input value:

Value Description
0x0001 RETURN_METADATA

Examples

A. Prepare and execute a statement

The following example prepares and executes a basic Transact-SQL statement.

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. Prepare and execute a statement using the handle

The following example prepares a statement in the AdventureWorks2022 database, and later executes it using the handle.

-- 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

Here's the result set.

1

Execute the query twice using the handle value 1, before discarding the prepared plan.

EXEC sp_execute 1, 49879;
GO

EXEC sp_execute 1, 48766;
GO

EXEC sp_unprepare 1;
GO