Compartir a través de


Metadatos de parámetros y resultados

En este tema se describe lo que se devuelve en los campos descriptor de parámetros de implementación (IPD) y descriptor de fila de implementación (IRD) para los tipos de datos de fecha y hora.

Información devuelta en campos IPD

La siguiente información se devuelve en los campos IPD:

Tipo de parámetro fecha Tiempo smalldatetime fecha y hora datetime2 datetimeoffset
SQL_DESC_CASE_SENSITIVE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_CONCISE_TYPE SQL_TYPE_DATE SQL_SS_TIME2 SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_SS_TIMESTAMPOFFSET
SQL_DESC_DATETIME_INTERVAL_CODE SQL_CODE_DATE 0 SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP 0
SQL_DESC_DATETIME_INTERVAL_PRECISION 10 8,10..16 16 23 19, 21..27 26, 28..34
SQL_DESC_FIXED_PREC_SCALE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_LENGTH 10 8,10..16 16 23 19, 21..27 26, 28..34
SQL_DESC_OCTET_LENGTH 6 12 4 8 16 20
SQL_DESC_PRECISION 0 0..7 0 3 0..7 0..7
SQL_DESC_SCALE 0 0..7 0 3 0..7 0..7
SQL_DESC_TYPE SQL_TYPE_DATE SQL_SS_TYPE_TIME2 SQL_DATETIME SQL_DATETIME SQL_DATETIME SQL_SS_TIMESTAMPOFFSET
SQL_DESC_TYPE_NAME date time smalldatetime en IRD, datetime2 en IPD datetime en IRD, datetime2 en IPD datetime2 datetimeoffset
SQL_CA_SS_VARIANT_TYPE SQL_C_TYPE_DATE SQL_C_TYPE_BINARY SQL_C_TYPE_TIMESTAMP SQL_C_TYPE_TIMESTAMP SQL_C_TYPE_TIMESTAMP SQL_C_TYPE_BINARY
SQL_CA_SS_VARIANT_SQL_TYPE SQL_TYPE_DATE SQL_SS_TIME2 SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_SS_TIMESTAMPOFFSET
SQL_CA_SS_SERVER_TYPE No disponible No disponible SQL_SS_TYPE_SMALLDATETIME SQL_SS_TYPE_DATETIME SQL_SS_TYPE_DEFAULT No disponible

A veces hay discontinuidades en intervalos de valores. Por ejemplo, falta 9 en 8.10..16. Esto se debe a la adición de un separador decimal cuando la precisión fraccionaria es mayor que cero.

datetime2 se devuelve como typename para smalldatetime y datetime porque el controlador lo usa como un tipo común para transmitir todos los SQL_TYPE_TIMESTAMP valores al servidor.

SQL_CA_SS_VARIANT_SQL_TYPE es un nuevo campo descriptor. Este campo se agregó a IRD e IPD para permitir que las aplicaciones especifiquen el tipo de valor asociado a sqlvariant (SQL_SSVARIANT) columnas y parámetros.

SQL_CA_SS_SERVER_TYPE es un nuevo campo de solo IPD para permitir que las aplicaciones controle cómo se envían los valores de los parámetros enlazados como SQL_TYPE_TYPETIMESTAMP (o como SQL_SS_VARIANT con un tipo C de SQL_C_TYPE_TIMESTAMP) al servidor. Si SQL_DESC_CONCISE_TYPE es SQL_TYPE_TIMESTAMP (o es SQL_SS_VARIANT y el tipo C es SQL_C_TYPE_TIMESTAMP) cuando se llama a SQLExecute o SQLExecDirect, el valor de SQL_CA_SS_SERVER_TYPE determina el tipo de flujo de datos tabular (TDS) del valor del parámetro, como se indica a continuación:

Valor de SQL_CA_SS_SERVER_TYPE Valores válidos para SQL_DESC_PRECISION Valores válidos para SQL_DESC_LENGTH Tipo de TDS
SQL_SS_TYPE_DEFAULT 0..7 19, 21..27 datetime2
SQL_SS_TYPE_SMALLDATETIME 0 19 smalldatetime
SQL_SS_TYPE_DATETIME 3 23 datetime

El valor predeterminado de SQL_CA_SS_SERVER_TYPE es SQL_SS_TYPE_DEFAULT. La configuración de SQL_DESC_PRECISION y SQL_DESC_LENGTH se valida con el valor de SQL_CA_SS_SERVER_TYPE tal como se describe en la tabla anterior. Si se produce un error en esta validación, se devuelve SQL_ERROR y se registra un registro de diagnóstico con SQLState 07006 y el mensaje "Infracción de atributo de tipo de datos restringido". Este error también se devuelve si SQL_CA_SS_SERVER_TYPE se establece en un valor distinto de SQL_SS_TYPE DEFAULT y DESC_CONCISE_TYPE no se SQL_TYPE_TIMESTAMP. Estas validaciones se realizan cuando se produce la validación de coherencia del descriptor, por ejemplo:

  • Cuando se cambia SQL_DESC_DATA_PTR.

  • En tiempo de preparación o ejecución (cuando se llama a SQLExecute, SQLExecDirect, SQLSetPos o SQLBulkOperations).

  • Cuando una aplicación fuerza una preparación no diferida mediante una llamada a SQLPrepare con preparación diferida deshabilitada o llamando a SQLNumResultCols, SQLDescribeCol o SQLDescribeParam para una instrucción preparada pero no ejecutada.

Cuando SQL_CA_SS_SERVER_TYPE se establece mediante una llamada a SQLSetDescField, su valor debe ser SQL_SS_TYPE_DEFAULT, SQL_SS_TYPE_SMALLDATETIME o SQL_SS_TYPE_DATETIME. Si no es así, se devuelve SQL_ERROR y se registra un registro de diagnóstico con SQLState HY092 y el mensaje "Identificador de atributo o opción no válidos".

Las aplicaciones que dependen de la funcionalidad admitida por datetime y smalldatetimepueden usar el atributo SQL_CA_SS_SERVER_TYPE , pero no datetime2. Por ejemplo, datetime2 requiere el uso de las dateadd funciones y datediif , mientras que datetime y smalldatetime también permiten operadores aritméticos. La mayoría de las aplicaciones no tendrán que usar este atributo y se debe evitar su uso.

Información devuelta en campos IRD

La siguiente información se devuelve en los campos IRD:

Tipo de columna fecha Tiempo smalldatetime fecha y hora datetime2 datetimeoffset
SQL_DESC_AUTO_UNIQUE_VALUE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_CASE_SENSITIVE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_CONCISE_TYPE SQL_TYPE_DATE SQL_SS_TIME2 SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_SS_TIMESTAMPOFFSET
SQL_DESC_DATETIME_INTERVAL_CODE SQL_CODE_DATE 0 SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP 0
SQL_DESC_DATETIME_INTERVAL_PRECISION 10 8,10..16 16 23 19, 21..27 26, 28..34
SQL_DESC_DISPLAY_SIZE 10 8,10..16 16 23 19, 21..27 26, 28..34
SQL_DESC_FIXED_PREC_SCALE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_LENGTH 10 8,10..16 16 2 19, 21..27 26, 28..34
SQL_DESC_LITERAL_PREFIX ' ' ' ' ' '
SQL_DESC_LITERAL_SUFFIX ' ' ' ' ' '
SQL_DESC_LOCAL_TYPE_NAME date time smalldatetime datetime datetime2 datetimeoffset
SQL_DESC_OCTET_LENGTH 6 12 4 8 16 20
SQL_DESC_PRECISION 0 0..7 0 3 0..7 0..7
SQL_DESC_SCALE 0 0..7 0 3 0..7 0..7
SQL_DESC_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE
SQL_DESC_TYPE SQL_DATETIME SQL_SS_TIME2 SQL_DATETIME SQL_DATETIME SQL_DATETIME SQL_SS_TIMESTAMPOFFSET
SQL_DESC_TYPE_NAME date time smalldatetime datetime datetime2 datetimeoffset
SQL_DESC_UNSIGNED SQL_TRUE SQL_TRUE SQL_TRUE SQL_TRUE SQL_TRUE SQL_TRUE

Véase también

Metadatos (ODBC)