Parámetros de comando
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Los parámetros se marcan en el texto de comando con el carácter de signo de interrogación de cierre. Por ejemplo, la siguiente instrucción SQL está marcada para un único parámetro de entrada:
{call SalesByCategory('Produce', ?)}
Para mejorar el rendimiento mediante la reducción del tráfico de red, el controlador OLE DB para SQL Server no deriva automáticamente la información de parámetros a menos que se llame a ICommandWithParameters::GetParameterInfo o ICommandPrepare::Prepare antes de ejecutar un comando. Esto significa que OLE DB Driver for SQL Server no hace automáticamente nada de lo siguiente:
Comprobar la exactitud del tipo de datos especificado con ICommandWithParameters::SetParameterInfo.
Asignar el DBTYPE especificado en la información de enlace del descriptor de acceso al tipo de datos SQL Server correcto para el parámetro.
Las aplicaciones recibirán posibles errores o pérdidas de precisión con cualquiera de estos métodos si especifican tipos de datos que no son compatibles con el tipo de datos SQL Server del parámetro.
Para asegurarse de que esto no ocurra, la aplicación debe:
Asegurarse de que pwszDataSourceType coincida con el tipo de datos SQL Server del parámetro si ICommandWithParameters::SetParameterInfo está codificado de forma rígida.
Asegurarse de que el valor DBTYPE enlazado al parámetro sea del mismo tipo que el tipo de datos SQL Server para el parámetro si se incluye un descriptor de acceso en el código.
Programar la aplicación para llamar a ICommandWithParameters::GetParameterInfo de forma que el proveedor pueda obtener dinámicamente los tipos de datos SQL Server de los parámetros. Tenga en cuenta que esto provoca un viaje de ida y vuelta (round trip) adicional de la red al servidor.
Nota
El proveedor no permite que se llame a ICommandWithParameters::GetParameterInfo para ninguna instrucción UPDATE o DELETE de SQL Server que contenga una cláusula FROM; para ninguna instrucción SQL que dependa de una subconsulta que contenga parámetros; para instrucciones SQL que contengan marcadores de parámetros en las dos expresiones de una comparación, igualdad o predicado cuantificado; o consultas donde uno de los parámetros sea un parámetro de una función. Al procesar un lote de instrucciones SQL, el proveedor tampoco admite que se llame a ICommandWithParameters::GetParameterInfo para marcadores de parámetros en instrucciones después de la primera instrucción del lote. No se permiten comentarios (/* /) en el comando de Transact-SQL.
OLE DB Driver for SQL Server admite parámetros de entrada en comandos de instrucciones SQL. En comandos de llamadas a procedimientos, OLE DB Driver for SQL Server admite parámetros de entrada, parámetros de salida y parámetros de entrada y salida. Los valores de los parámetros de salida se devuelven a la aplicación en ejecución (únicamente si no se ha devuelto ningún conjunto de filas) o cuando la aplicación agota todos los conjuntos de filas. Para asegurarse de que los valores devueltos sean válidos, use IMultipleResults para forzar el consumo del conjunto de filas.
No es necesario especificar los nombres de los parámetros de procedimientos almacenados en una estructura DBPARAMBINDINFO. Use NULL para el valor del miembro pwszName a fin de indicar que el controlador OLE DB para SQL Server debe omitir el nombre del parámetro y usar solo el ordinal especificado en el miembro rgParamOrdinals de ICommandWithParameters::SetParameterInfo. Si el texto del comando contiene tanto parámetros con nombre como parámetros sin nombre, todos los parámetros sin nombre deben especificarse antes de cualquier parámetro con nombre.
Si se especifica el nombre de un parámetro de procedimiento almacenado, el controlador OLE DB para SQL Server lo comprueba para asegurarse de que es válido. OLE DB Driver for SQL Server devuelve un error cuando recibe un nombre de parámetro erróneo por parte del consumidor.
Nota
Para exponer la compatibilidad con XML y tipos definidos por el usuario (UDT) de SQL Server, el controlador OLE DB para SQL Server implementa una nueva interfaz ISSCommandWithParameters.