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 apresenta 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). |
SQL_C_SS_TIME2 |
time |
SQL_CA_SS_VARIANT_SQL_TYPE é ignorado |
SQL_C_SS_TIMESTAMPOFFSET |
datetimeoffset |
SQL_CA_SS_VARIANT_SQL_TYPE é ignorado |