sp_prepare (Transact SQL)

Se aplica a:SQL ServerAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Prepara una instrucción Transact-SQL con parámetros y devuelve un identificador de instrucción para su ejecución. sp_prepare se invoca especificando ID = 11 en un paquete de flujo de datos tabular (TDS).

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

identificador

Identificador de identificador preparado generado por SQL Server. handle es un parámetro necesario con un valor devuelto int .

params

Identifica instrucciones con parámetros. los parámetros son un parámetro OUTPUT necesario que llama a un valor de entrada ntext, nchar o nvarchar . La definición de parámetros de las variables se sustituye por los marcadores de parámetro en la instrucción . Escriba un NULL valor si la instrucción no está parametrizada.

stmt

Define el conjunto de resultados del cursor. El parámetro stmt es obligatorio y llama a para un valor de entrada ntext, nchar o nvarchar .

options

Parámetro opcional que devuelve una descripción de las columnas del conjunto de resultados del cursor. las opciones requieren el siguiente valor de entrada:

Value Descripción
0x0001 RETURN_METADATA

Ejemplos

A Preparación y ejecución de una instrucción

En el ejemplo siguiente se prepara y ejecuta una instrucción básica de 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. Preparación y ejecución de una instrucción mediante el identificador

En el ejemplo siguiente se prepara una instrucción en la AdventureWorks2022 base de datos y, posteriormente, se ejecuta mediante el identificador .

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

El conjunto de resultados es el siguiente:

1

Ejecute la consulta dos veces con el valor 1de identificador , antes de descartar el plan preparado.

EXEC sp_execute 1, 49879;
GO

EXEC sp_execute 1, 48766;
GO

EXEC sp_unprepare 1;
GO