Marcadores de parámetros (motor de base de datos)

Los marcadores de parámetros son compatibles con las API de bases de datos basadas en ADO, OLE DB y ODBC. Un marcador de parámetro es un signo de interrogación (?) colocado en la posición de una expresión de entrada o de salida de una instrucción Transact-SQL. Los marcadores de parámetros permiten a una aplicación optimizar el caso en el que la misma instrucción Transact-SQL se ejecuta varias veces con distintos valores para las expresiones de entrada y de salida.

Por ejemplo, puede que un usuario haya dado a una aplicación cinco símbolos de acciones y la aplicación deba llamar a un procedimiento almacenado que obtenga los datos actuales de cada una de las acciones. La aplicación podría hacer lo siguiente:

  • Preparar esta instrucción Transact-SQL:

    EXEC GetQuoteProcedure @StockSymbolParameter = ?
    
  • Enlazar una variable de aplicación al marcador de parámetro (?).

  • Ejecutar un bucle:

    1. Mover el siguiente símbolo de acciones a la variable enlazada.

    2. Ejecutar la instrucción para recuperar la cotización de esas acciones.

Los marcadores de parámetros no se limitan a su asignación a parámetros de procedimientos almacenados. Los marcadores de parámetros se pueden usar en cualquier lugar en que se use una expresión de entrada, por ejemplo:

UPDATE HumanResources.Employees
SET Title = ?
WHERE EmployeeID = ?

Los marcadores de parámetros se pueden usar también para asignar los parámetros de salida y códigos de retorno de los procedimientos almacenados. Cuando la aplicación ejecuta un procedimiento almacenado, el proveedor OLE DB o el controlador ODBC mueve el valor de los datos desde cualquier parámetro de salida o código de retorno a las variables enlazadas a los marcadores del parámetro.

Por ejemplo, una aplicación puede ejecutar el procedimiento siguiente. Este procedimiento devuelve un código de retorno de tipo entero y un parámetro de salida de caracteres.

  1. Prepare una instrucción:

    {? = CALL MyProc (?)}
    
  2. Enlace el primer marcador de parámetro a una variable de tipo entero y el segundo marcador a una matriz de caracteres.

  3. Ejecute la instrucción.

  4. Recupere o cancele todos los conjuntos de resultados devueltos por el procedimiento almacenado.

En este punto, el proveedor Microsoft OLE DB para SQL Server o el controlador ODBC de SQL Server habrá incluido el código de retorno y el valor del parámetro de salida en las variables enlazadas. Microsoft SQL Server envía los valores del parámetro de salida y del código de retorno en el último paquete que devuelve al cliente. La aplicación debe, por tanto, procesar o cancelar todos los conjuntos de resultados devueltos por el procedimiento almacenado antes de que tenga acceso a los valores del código de retorno y de los parámetros de salida.

La API de ADO tiene una variación de este proceso para ejecutar procedimientos almacenados. Una aplicación ADO lleva a cabo lo siguiente:

  1. Establece el tipo de objeto Command en adCmdStoredProc.

  2. Establece el texto del comando con el nombre del procedimiento.

  3. Genera una colección Parameters y enlaza todos los parámetros y códigos de retorno a variables de aplicación.

  4. Ejecuta el objeto Command.

Los marcadores de parámetro se asocian a un objeto de base de datos que tiene un tipo específico de datos. Si la aplicación enlaza un marcador de parámetro a una variable cuyo tipo de datos es distinto del tipo de datos del objeto de base de datos asociado, el proveedor OLE DB o el controlador ODBC deben convertir los datos. Por ejemplo, si una aplicación enlaza un código de retorno de tipo entero a una matriz de caracteres, el proveedor OLE DB o el controlador ODBC deben convertir los datos enteros del código de retorno a una cadena de caracteres. Para obtener información acerca de las conversiones de tipos de datos admitidas, vea la documentación del proveedor OLE DB para SQL Server y del controlador ODBC de SQL Server.