sp_prepare (Transact SQL)

Gäller för:SQL ServerAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)

Förbereder ett parameteriserat Transact-SQL-uttalande och returnerar ett uttalandeshandtag för exekvering. sp_prepare anropas genom att specificera ID = 11 i ett tabellariskt dataströmspaket (TDS).

Transact-SQL syntaxkonventioner

Syntax

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

Arguments

handtag

En SQL Server-genererad förberedd handle-identifierare . Handle är en obligatorisk parameter med ett int-returvärde .

params

Identifierar parametriserade instruktioner. params är en obligatorisk OUTPUT-parameter som kräver ett ntext-, nchar- eller nvarchar-indatavärde . params definition av variabler ersätts med parametermarkörer i -instruktionen. Mata in ett NULL värde om satsen inte är parameteriserad.

STMT

Definierar markörens resultatuppsättning. Stmt-parametern krävs och kräver ett ntext-, nchar- eller nvarchar-indatavärde.

Alternativ

En valfri parameter som returnerar en beskrivning av kolumnerna i markörresultatuppsättningen. Options kräver följande indatavärde:

Värde Description
0x0001 RETURN_METADATA

Examples

A. Förbered och genomför ett uttalande

Följande exempel förbereder och exekverar en grundläggande Transact-SQL-sats.

DECLARE @handle AS INT;

EXECUTE 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';

EXECUTE sp_execute
    @handle,
    N'tempdb', N'ONLINE';

EXECUTE sp_unprepare @handle;

B. Förbered och kör ett uttalande med handtaget

Följande exempel förbereder ett uttalande i databasen AdventureWorks2025 och exekverar det senare med handtaget.

-- Prepare query
DECLARE @handle AS INT;

EXECUTE 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

Här är resultatet.

1

Kör frågan två gånger med handtagsvärdet 1, innan du kastar den förberedda planen.

EXECUTE sp_execute 1, 49879;
GO

EXECUTE sp_execute 1, 48766;
GO

EXECUTE sp_unprepare 1;
GO