Compartir a través de


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. El controlador utiliza la instrucción SET FMTONLY al ejecutar la consulta. Los metadatos del conjunto de resultados determinan las características de los parámetros en la instrucción preparada.

Considere esta instrucción ODBC SQL:

INSERT INTO Shippers (ShipperID, CompanyName, Phone) VALUES (?, ?, ?)

En una llamada a SQLDescribeParam, esta instrucción ODBC SQL hace que el controlador ejecute las siguientes instrucciones Transact-SQL:

SET FMTONLY ON
SELECT ShipperID, CompanyName, Phone FROM Shippers
SET FMTONLY OFF

SQLDescribeParam puede, por tanto, devolver cualquier código de error que puedan devolver SQLExecute o SQLExecDirect.

Además, 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. 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).