Teilen über


sp_prepare (Transact-SQL)

Gilt für: SQL Server Azure SQL verwaltete Instanz Azure Synapse Analytics Analytics Platform System (PDW)

Bereitet eine parametrisierte Transact-SQL-Anweisung vor und gibt ein Anweisungshandle für die Ausführung zurück. sp_prepare wird aufgerufen, indem in einem TDS-Paket (Tabular Data Stream) angegeben ID = 11 wird.

Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

Handle

Ein vom SQL Server generierter , vorbereiteter Handlebezeichner . handle ist ein erforderlicher Parameter mit einem int -Rückgabewert.

params

Identifiziert parametrisierte Anweisungen. params ist ein erforderlicher OUTPUT-Parameter, der einen ntext-, nchar- oder nvarchar-Eingabewert aufruft. Die params -Definition der Variablen wird in der Anweisung an die Stelle der Parametermarkierungen gesetzt. Geben Sie einen Wert ein NULL , wenn die Anweisung nicht parametrisiert ist.

stmt

Definiert das Resultset des Cursors. Der stmt-Parameter ist erforderlich und ruft einen ntext-, nchar- oder nvarchar-Eingabewert auf.

Optionen

Ein optionaler Parameter, der eine Beschreibung der Spalten im Cursorresultset zurückgibt. für optionen ist der folgende Eingabewert erforderlich:

Wert Beschreibung
0x0001 RETURN_METADATA

Beispiele

A. Vorbereiten und Ausführen einer Anweisung

Im folgenden Beispiel wird eine einfache Transact-SQL-Anweisung vorbereitet und ausgeführt.

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. Vorbereiten und Ausführen einer Anweisung mithilfe des Handles

Im folgenden Beispiel wird eine Anweisung in der AdventureWorks2022 Datenbank vorbereitet und später mithilfe des Handles ausgeführt.

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

Hier sehen Sie das Ergebnis.

1

Führen Sie die Abfrage zweimal mithilfe des Handlewerts 1aus, bevor Sie den vorbereiteten Plan verwerfen.

EXEC sp_execute 1, 49879;
GO

EXEC sp_execute 1, 48766;
GO

EXEC sp_unprepare 1;
GO