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 1
aus, bevor Sie den vorbereiteten Plan verwerfen.
EXEC sp_execute 1, 49879;
GO
EXEC sp_execute 1, 48766;
GO
EXEC sp_unprepare 1;
GO