Compartir a través de


Compatibilidad con sql_variant para tipos de fecha y hora

En este tema se describe la forma en que el tipo de datos sql_variant admite una funcionalidad de fecha y hora mejorada.

El atributo de columna SQL_CA_SS_VARIANT_TYPE se usa para devolver el tipo C de una columna de resultados variant. SQL Server 2008 introdujo un atributo adicional, SQL_CA_SS_VARIANT_SQL_TYPE, que establece el tipo SQL de una columna de resultados variant en el descriptor de filas de implementación (IRD). SQL_CA_SS_VARIANT_SQL_TYPE también puede usarse en el descriptor de parámetros de implementación (IPD) para especificar el tipo SQL de un parámetro SQL_SS_TIME2 o SQL_SS_TIMESTAMPOFFSET que tiene un tipo SQL_C_BINARY de C enlazado al tipo SQL_SS_VARIANT.

SQLColAttribute puede establecer los nuevos tipos SQL_SS_TIME2 y SQL_SS_TIMESTAMPOFFSET. SQLGetDescField puede devolver SQL_CA_SS_VARIANT_SQL_TYPE.

Para las columnas de resultados, el controlador convertirá el tipo variant en un tipo de fecha y hora. Para obtener más información, vea Conversiones de SQL a C. Al realizar un enlace a SQL_C_BINARY, la longitud del búfer debe ser lo suficientemente grande como para recibir la estructura correspondiente al tipo SQL.

Para los parámetros SQL_SS_TIME2 y SQL_SS_TIMESTAMPOFFSET, el controlador convertirá los valores de C en valores sql_variant, tal y como describe a continuación en la tabla. Si un parámetro se enlaza como SQL_C_BINARY y el tipo de servidor es SQL_SS_VARIANT, se considerará como un valor binario a menos que la aplicación haya establecido SQL_CA_SS_VARIANT_SQL_TYPE en un otro tipo SQL. En este caso, SQL_CA_SS_VARIANT_SQL_TYPE tiene prioridad; es decir, si se establece SQL_CA_SS_VARIANT_SQL_TYPE, invalida el comportamiento predeterminado de deducir el tipo variant de SQL a partir del tipo de C.

Tipo de C

Tipo de servidor

Comentarios

SQL_C_CHAR

varchar

Se omite SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_WCHAR

nvarcar

Se omite SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_TINYINT

smallint

Se omite SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_STINYINT

smallint

Se omite SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_SHORT

smallint

Se omite SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_SSHORT

smallint

Se omite SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_USHORT

int

Se omite SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_LONG

int

Se omite SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_SLONG

int

Se omite SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_ULONG

bigint

Se omite SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_SBIGINT

bigint

Se omite SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_FLOAT

real

Se omite SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_DOUBLE

float

Se omite SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_BIT

bit

Se omite SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_UTINYINT

tinyint

Se omite SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_BINARY

varbinary

No se establece SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_BINARY

time

SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIME2

La escala se establece en SQL_DESC_PRECISION (el parámetro DecimalDigits de SQLBindParameter).

SQL_C_BINARY

datetimeoffset

SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIMESTAMPOFFSET

La escala se establece en SQL_DESC_PRECISION (el parámetro DecimalDigits de SQLBindParameter).

SQL_C_TYPE_DATE

date

Se omite SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_TYPE_TIME

time(0)

Se omite SQL_CA_SS_VARIANT_SQL_TYPE.

SQL_C_TYPE_TIMESTAMP

datetime2

La escala se establece en SQL_DESC_PRECISION (el parámetro DecimalDigits de SQLBindParameter).

SQL_C_NUMERIC

decimal

La precisión se establece en SQL_DESC_PRECISION (el parámetro ColumnSize de SQLBindParameter).

La escala se establece en SQL_DESC_SCALE (el parámetro DecimalDigits de SQLBindParameter).