Compartir a través de


SQLDescribeParam

Para describir los parámetros de cualquier instrucción SQL, el controlador ODBC de SQL Server Native Client compila y ejecuta una instrucción SELECT de Transact-SQL cuando se llama a SQLDescribeParam en un identificador de instrucción ODBC preparado. Los metadatos del conjunto de resultados determinan las características de los parámetros de la instrucción preparada. SQLDescribeParam puede devolver cualquier código de error que SQLExecute o SQLExecDirect pueda 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 devueltos por SQLDescribeParam en versiones anteriores de SQL Server. Para obtener más información, vea Detección de metadatos.

Novedades también en SQL Server 2012, ParameterSizePtr ahora devuelve un valor que se alinea 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 la especificación ODBC. En versiones anteriores de SQL Server Native Client, ParameterSizePtr podría ser el valor correspondiente del SQL_DESC_OCTET_LENGTH tipo o un valor de tamaño de columna irrelevante que se proporcionó a SQLBindParameter para un tipo, el valor de que se debe omitir (SQL_INTEGERpor ejemplo).

El controlador no admite la llamada a SQLDescribeParam en las situaciones siguientes:

  • Después de SQLExecDirect para cualquier Transact-SQL instrucciones UPDATE o DELETE que contengan la cláusula FROM.

  • Para cualquier instrucción ODBC o Transact-SQL que contenga un parámetro en una cláusula HAVING o en comparación con el resultado de una función SUM.

  • Para cualquier instrucción ODBC o Transact-SQL en función de una subconsulta que contenga parámetros.

  • Para las instrucciones SQL odbc que contienen marcadores de parámetro en ambas expresiones de una comparación, como o predicado cuantificado.

  • Para las consultas en las que uno de los parámetros es un parámetro para una función.

  • Cuando hay comentarios (/* */) en el comando Transact-SQL.

Al procesar un lote de instrucciones Transact-SQL, el controlador tampoco admite llamar a SQLDescribeParam para los marcadores de parámetro en instrucciones después de la primera instrucción del lote.

Al describir los parámetros de los procedimientos almacenados preparados, SQLDescribeParam usa el procedimiento almacenado del sistema sp_sproc_columns para recuperar las características de los parámetros. sp_sproc_columns puede informar de los datos de los procedimientos almacenados dentro de la base de datos de usuario actual. La preparación de un nombre de procedimiento almacenado completo permite que SQLDescribeParam se ejecute entre bases de datos. Por ejemplo, el procedimiento almacenado del 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 la preparación correcta devuelve un conjunto de filas vacío cuando se conecta a cualquier base de datos, pero master. La misma llamada, preparada como se indica a continuación, hace que SQLDescribeParam se realice correctamente independientemente de la base de datos de usuario actual:

SQLPrepare(hstmt, "{call master..sp_who(?)}", SQL_NTS);  

Para los tipos de datos de gran valor, el valor devuelto en 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. Los valores de tamaño real se devuelven para los parámetros estándar varchar .

Nota:

Si el parámetro ya se ha enlazado con un tamaño máximo para la SQL_VARCHAR, SQL_VARBINARY o SQL_WVARCHAR parámetros, se devuelve el tamaño enlazado del parámetro, no "ilimitado".

Para enlazar un parámetro de entrada de tamaño "ilimitado", se deben usar los 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 datos desde un parámetro de salida, como SQLGetData hace para 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 de SQL_SUCCESS_WITH_INFO y se devuelve junto con los "datos de cadena; advertencia de truncamiento derecho". A continuación, se descartan los datos truncados.

Parámetros SQLDescribeParam y Table-Valued

Una aplicación puede recuperar información de parámetros con valores de tabla para una instrucción preparada con SQLDescribeParam. Para obtener más información, vea Table-Valued metadatos de parámetros para instrucciones preparadas.

Para obtener más información sobre los parámetros con valores de tabla en general, vea Table-Valued Parameters (ODBC).

Compatibilidad de SQLDescribeParam con características mejoradas de fecha y hora

Los valores devueltos para los tipos de fecha y hora son los siguientes:

DataTypePtr ParameterSizePtr DecimalDigitsPtr
fecha y hora SQL_TYPE_TIMESTAMP 23 3
smalldatetime SQL_TYPE_TIMESTAMP 16 0
fecha SQL_TYPE_DATE 10 0
Tiempo 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 de fecha y hora (ODBC).

Compatibilidad con SQLDescribeParam para udT clR grandes

SQLDescribeParam admite tipos definidos por el usuario (UDT) clR grandes. Para obtener más información, vea Tipos definidos por el usuario (ODBC) clR grandes.

Véase también

Función SQLDescribeParam
Detalles de implementación de la API de ODBC