sp_prepare (Transact SQL)

適用於:SQL ServerAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

準備參數化的 Transact-SQL 語句,並傳回語句 句柄 以供執行。 sp_prepare 是在表格式資料流 (TDS) 封包中指定 ID = 11 來叫用。

Transact-SQL 語法慣例

語法

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

引數

控制代碼

SQL Server 產生的 備妥句柄 標識碼。 handle 是具有 int 傳回值的必要參數。

params

識別參數化語句。 params 是呼叫 ntextnchar 或 nvarchar 輸入值的必要 OUTPUT 參數變數的參數定義會取代 語句中的參數標記。 如果未參數化語句,則輸入 NULL 值。

stmt

定義數據指標結果集。 stmt 參數是必要的,而且會呼叫 ntextnchar 或 nvarchar 輸入值。

options

選擇性參數,會傳回數據指標結果集數據行的描述。 選項 需要下列輸入值:

Description
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