Partilhar via


Suporte a Sql_variant para tipos de data/hora

Este tópico descreve como o tipo de dados sql_variant oferece suporte à funcionalidade aprimorada de data e hora.

O atributo de coluna SQL_CA_SS_VARIANT_TYPE é usado para retornar o tipo C de uma coluna de resultado variável. O SQL Server 2008 apresentou um atributo adicional, SQL_CA_SS_VARIANT_SQL_TYPE, que define o tipo SQL de uma coluna de resultado variável no IRD (descritor de linha de implementação). SQL_CA_SS_VARIANT_SQL_TYPE também pode ser usado no IPD (descritor de parâmetro de implementação) para especificar o tipo SQL de um parâmetro SQL_SS_TIME2 ou SQL_SS_TIMESTAMPOFFSET com tipo SQL_C_BINARY C associado ao tipo SQL_SS_VARIANT.

Os novos tipos SQL_SS_TIME2 e SQL_SS_TIMESTAMPOFFSET podem ser definidos por SQLColAttribute. SQL_CA_SS_VARIANT_SQL_TYPE pode ser retornado por SQLGetDescField.

Em colunas de resultado, o driver será convertido da variante em tipos de data/hora. Para obter mais informações, consulte Conversões de SQL em C. Durante a associação a SQL_C_BINARY, o comprimento do buffer deve ser grande o suficiente para receber o struct correspondente ao tipo SQL.

Para os parâmetros SQL_SS_TIME2 e SQL_SS_TIMESTAMPOFFSET, o driver converterá valores de C em valores sql_variant, conforme descrição na tabela abaixo. Se um parâmetro for associado como SQL_C_BINARY e o tipo de servidor for SQL_SS_VARIANT, ele será tratado como um valor binário, a menos que o aplicativo tenha definido SQL_CA_SS_VARIANT_SQL_TYPE como outro tipo SQL. Nesse caso, SQL_CA_SS_VARIANT_SQL_TYPE tem precedência; ou seja, caso SQL_CA_SS_VARIANT_SQL_TYPE seja definido, ele substitui o comportamento padrão de dedução do tipo SQL variável do tipo C.

Tipo de C

Tipo de servidor

Comentários

SQL_C_CHAR

varchar

SQL_CA_SS_VARIANT_SQL_TYPE é ignorado.

SQL_C_WCHAR

nvarcar

SQL_CA_SS_VARIANT_SQL_TYPE é ignorado.

SQL_C_TINYINT

smallint

SQL_CA_SS_VARIANT_SQL_TYPE é ignorado.

SQL_C_STINYINT

smallint

SQL_CA_SS_VARIANT_SQL_TYPE é ignorado.

SQL_C_SHORT

smallint

SQL_CA_SS_VARIANT_SQL_TYPE é ignorado.

SQL_C_SSHORT

smallint

SQL_CA_SS_VARIANT_SQL_TYPE é ignorado.

SQL_C_USHORT

int

SQL_CA_SS_VARIANT_SQL_TYPE é ignorado.

SQL_C_LONG

int

SQL_CA_SS_VARIANT_SQL_TYPE é ignorado.

SQL_C_SLONG

int

SQL_CA_SS_VARIANT_SQL_TYPE é ignorado.

SQL_C_ULONG

bigint

SQL_CA_SS_VARIANT_SQL_TYPE é ignorado.

SQL_C_SBIGINT

bigint

SQL_CA_SS_VARIANT_SQL_TYPE é ignorado.

SQL_C_FLOAT

real

SQL_CA_SS_VARIANT_SQL_TYPE é ignorado.

SQL_C_DOUBLE

float

SQL_CA_SS_VARIANT_SQL_TYPE é ignorado.

SQL_C_BIT

bit

SQL_CA_SS_VARIANT_SQL_TYPE é ignorado.

SQL_C_UTINYINT

tinyint

SQL_CA_SS_VARIANT_SQL_TYPE é ignorado.

SQL_C_BINARY

varbinary

SQL_CA_SS_VARIANT_SQL_TYPE não é definido.

SQL_C_BINARY

time

SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIME2

A escala é definida como SQL_DESC_PRECISION (o parâmetro DecimalDigits de SQLBindParameter).

SQL_C_BINARY

datetimeoffset

SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIMESTAMPOFFSET

A escala é definida como SQL_DESC_PRECISION (o parâmetro DecimalDigits de SQLBindParameter).

SQL_C_TYPE_DATE

date

SQL_CA_SS_VARIANT_SQL_TYPE é ignorado.

SQL_C_TYPE_TIME

time(0)

SQL_CA_SS_VARIANT_SQL_TYPE é ignorado.

SQL_C_TYPE_TIMESTAMP

datetime2

A escala é definida como SQL_DESC_PRECISION (o parâmetro DecimalDigits de SQLBindParameter).

SQL_C_NUMERIC

decimal

A precisão é definida como SQL_DESC_PRECISION (o parâmetro ColumnSize de SQLBindParameter).

A escala é definida como SQL_DESC_SCALE (o parâmetro DecimalDigits de SQLBindParameter).

Consulte também

Conceitos