SQLDescribeParam
Para describir los parámetros de una instrucción SQL, el controlador ODBC de SQL Server Native Client genera y ejecuta una instrucción SELECT de Transact-SQL cuando se llama a SQLDescribeParam en un identificador de instrucciones de ODBC preparado. Los metadatos del conjunto de resultados determinan las características de los parámetros en la instrucción preparada. SQLDescribeParam puede devolver cualquier código de error que SQLExecute o SQLExecDirect pudieran devolver.
Las mejoras en el motor de base de datos a partir de SQL Server 2012 permiten a SQLDescribeParam obtener descripciones más precisas de los resultados esperados. Estos resultados más precisos pueden diferir de los valores que devuelve SQLDescribeParam en las versiones anteriores de SQL Server. Para obtener más información, vea Detección de metadatos.
También nuevo en SQL Server 2012, ParameterSizePtr ahora devuelve un valor en línea con la definición del tamaño, en caracteres, de la columna o expresión del marcador de parámetro correspondiente, tal como se define en las especificaciones ODBC. En versiones anteriores de SQL Server Native Client, ParameterSizePtr podía ser el valor correspondiente de SQL_DESC_OCTET_LENGTH para el tipo, o un valor irrelevante de tamaño de columna que se proporcionó a SQLBindParameter para un tipo, cuyo valor se debía pasar por alto (SQL_INTEGER, por ejemplo).
El controlador no permite llamar a SQLDescribeParam en las situaciones siguientes:
Después de SQLExecDirect en cualquier instrucción Transact-SQL UPDATE o DELETE que contenga la cláusula FROM.
En cualquier instrucción ODBC o Transact-SQL que contenga un parámetro en una cláusula HAVING o se compare con el resultado de una función SUM.
En cualquier instrucción ODBC o Transact-SQL que dependa de una subconsulta que contiene parámetros.
En instrucciones ODBC SQL que contengan marcadores de parámetros en ambas expresiones de una comparación, igualdad o predicado cuantificado.
En cualquier consulta donde uno de los parámetros sea un parámetro a una función.
Cuando haya comentarios (/* */) en el comando Transact-SQL.
Al procesar un lote de instrucciones Transact-SQL, el controlador tampoco admite la llamada a SQLDescribeParam en marcadores de parámetros de instrucciones posteriores a la primera instrucción del lote.
Al describir los parámetros de procedimientos almacenados preparados, SQLDescribeParam utiliza el procedimiento almacenado de sistema sp_sproc_columns para recuperar las características de parámetro. puede sp_sproc_columns pueden notificar datos de procedimientos almacenados dentro de la base de datos de usuario actual. La preparación de un nombre del procedimiento almacenado completo permite ejecutar SQLDescribeParam entre bases de datos. Por ejemplo, el procedimiento almacenado de sistema sp_who se puede preparar y ejecutar en cualquier base de datos como:
SQLPrepare(hstmt, "{call sp_who(?)}", SQL_NTS);
La ejecución de SQLDescribeParam después de una preparación correcta devuelve un conjunto de filas vacío cuando se conecta a una base de datos distinta de master. La misma llamada, preparada como sigue, ejecuta SQLDescribeParam correctamente con independencia de la base de datos de usuario actual:
SQLPrepare(hstmt, "{call master..sp_who(?)}", SQL_NTS);
En tipos de datos de valores grandes, el valor devuelto DataTypePtr es SQL_VARCHAR, SQL_VARBINARY o SQL_NVARCHAR. Para indicar que el tamaño del parámetro de tipo de datos de valor grande es "ilimitado", el controlador ODBC de SQL Server Native Client establece ParameterSizePtr en 0. En los parámetros varchar estándar se devuelven los valores de tamaño reales.
[!NOTA]
Si el parámetro ya se ha enlazado con un tamaño máximo para los parámetros SQL_VARCHAR, SQL_WVARCHAR o SQL_VARBINARY, se devuelve el tamaño enlazado del parámetro, no "ilimitado".
Para enlazar un parámetro de entrada de tamaño "ilimitado", se deben utilizar datos en ejecución. No es posible enlazar un parámetro de salida de tamaño "ilimitado" (no hay ningún método para transmitir por secuencias los datos de un parámetro de salida, como SQLGetData en los conjuntos de resultados).
Para los parámetros de salida se debe enlazar un búfer y, si el valor es demasiado grande, el búfer se rellena y se devuelve un mensaje SQL_SUCCESS_WITH_INFO junto con la advertencia "Datos tipo String, se truncarán por la derecha". Los datos truncados se descartan.
SQLDescribeParam y parámetros con valores de tabla
Una aplicación puede recuperar información de parámetros con valores de tabla en una instrucción preparada con SQLDescribeParam. Para obtener más información, vea Metadatos de parámetros con valores de tabla para instrucciones preparadas.
Para obtener más información acerca de los parámetros con valores de tabla en general, vea Parámetros con valores de tabla (ODBC).
SQLDescribeParam admite las características mejoradas de fecha y hora
Los valores devueltos para los tipos de fecha y hora son los siguientes:
DataTypePtr |
ParameterSizePtr |
DecimalDigitsPtr |
|
---|---|---|---|
datetime |
SQL_TYPE_TIMESTAMP |
23 |
3 |
smalldatetime |
SQL_TYPE_TIMESTAMP |
16 |
0 |
date |
SQL_TYPE_DATE |
10 |
0 |
time |
SQL_SS_TIME2 |
8, 10..16 |
0..7 |
datetime2 |
SQL_TYPE_TIMESTAMP |
19, 21..27 |
0..7 |
datetimeoffset |
SQL_SS_TIMESTAMPOFFSET |
26, 28..34 |
0..7 |
Para obtener más información, vea Mejoras en los tipos de datos de fecha y hora (ODBC).
SQLDescribeParam admite UDT CLR grandes
SQLDescribeParam admite los tipos definidos por el usuario (UDT) CLR grandes. Para obtener más información, vea Tipos CLR grandes definidos por el usuario (ODBC).
Vea también
Conceptos
Detalles de implementación de la API de ODBC