sp_prepare (Transact SQL)

适用于:SQL Server Azure SQL 托管实例 Azure Synapse Analytics Analytics 平台系统(PDW)

准备参数化的 Transact-SQL 语句并返回语句 句柄 以供执行。 sp_prepare 通过在表格数据流(TDS)数据包中指定 ID = 11 来调用。

Transact-SQL 语法约定

语法

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

参数

handle

SQL Server 生成的 已准备句柄 标识符。 handle 是具有 int 返回值的必需参数。

params

标识参数化语句。 params 是一个必需的 OUTPUT 参数,它调用 ntextnchar 或 nvarchar 输入值。 变量的参数定义将替换为语句中的参数标记。 NULL如果未参数化语句,则输入值。

stmt

定义游标结果集。 stmt 参数是必需的,并调用 ntextnchar 或 nvarchar 输入值。

options

一个可选参数,它返回游标结果集列的说明。 选项 需要以下输入值:

说明
0x0001 RETURN_METADATA

示例

A. 准备和执行语句

以下示例准备和执行基本的 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