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:
Mover el siguiente símbolo de acciones a la variable enlazada.
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.
Prepare una instrucción:
{? = CALL MyProc (?)}
Enlace el primer marcador de parámetro a una variable de tipo entero y el segundo marcador a una matriz de caracteres.
Ejecute la instrucción.
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. MicrosoftSQL 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:
Establece el tipo de objeto Command en adCmdStoredProc.
Establece el texto del comando con el nombre del procedimiento.
Genera una colección Parameters y enlaza todos los parámetros y códigos de retorno a variables de aplicación.
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.