Parámetros de comando de SQL Server Native Client

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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 al reducir el tráfico de red, el proveedor OLE DB de SQL Server Native Client no deriva automáticamente información de parámetros a menos que se llame a ICommandWithParameters::GetParameterInfo o ICommandPrepare::P repare antes de ejecutar un comando. Esto significa que el proveedor OLE DB de SQL Server Native Client no lo hace automáticamente:

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

El proveedor OLE DB de SQL Server Native Client admite parámetros de entrada en comandos de instrucción SQL. En los comandos de llamada a procedimiento, el proveedor OLE DB de SQL Server Native Client admite parámetros de entrada, salida y entrada/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 para indicar que el proveedor OLE DB de SQL Server Native Client 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 proveedor OLE DB SQL Server Native Client comprueba el nombre para asegurarse de que es válido. El SQL Server Native Client proveedor OLE DB devuelve un error cuando recibe un nombre de parámetro erróneo del consumidor.

Nota

Para exponer la compatibilidad con SQL Server tipos XML y definidos por el usuario (UDT), el proveedor OLE DB de SQL Server Native Client implementa una nueva interfaz ISSCommandWithParameters.

Consulte también

Comandos