sp_prepare (Transact SQL)
适用于:SQL Server Azure SQL 托管实例 Azure Synapse Analytics Analytics 平台系统(PDW)
准备参数化的 Transact-SQL 语句并返回语句 句柄 以供执行。 sp_prepare
通过在表格数据流(TDS)数据包中指定 ID = 11
来调用。
语法
sp_prepare
handle OUTPUT
, params
, stmt
, options
[ ; ]
参数
handle
SQL Server 生成的 已准备句柄 标识符。 handle 是具有 int 返回值的必需参数。
params
标识参数化语句。 params 是一个必需的 OUTPUT 参数,它调用 ntext、nchar 或 nvarchar 输入值。 变量的参数定义将替换为语句中的参数标记。 NULL
如果未参数化语句,则输入值。
stmt
定义游标结果集。 stmt 参数是必需的,并调用 ntext、nchar 或 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