sp_prepare (Transact SQL)

適用対象:SQL ServerAzure SQL Managed InstanceAzure 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 は、ntext、nchar、または nvarchar 入力値を呼び出す必須の OUTPUT パラメーターです。 変数のパラメーター定義は、ステートメント内のパラメーター マーカーに置き換えられます。 ステートメントが NULL パラメーター化されていない場合は、値を入力します。

Stmt

カーソル結果セットを定義します。 stmt パラメーターは必須であり、ntext、ncharまたは nvarchar の入力値を呼び出します。

options

カーソル結果セット列の説明を返す省略可能なパラメーター。 オプション には、次の入力値が必要です。

Value 説明
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を使用してクエリを 2 回実行します。

EXEC sp_execute 1, 49879;
GO

EXEC sp_execute 1, 48766;
GO

EXEC sp_unprepare 1;
GO