Compartilhar via


Suporte a Sql_variant para tipos de data e hora

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure PDW (Sistema de Plataforma de Análise) do Azure Synapse Analytics

Este tópico descreve como o tipo de dados sql_variant dá 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 (10.0.x)SQL Server 2008 (10.0.x)SQL Server 2008 (10.0.x)SQL_CA_SS_VARIANT_SQL_TYPE que define o tipo SQL de uma coluna de resultado de variante 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 que tem SQL_C_BINARY tipo 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 para C. Ao associar a SQL_C_BINARY, o comprimento do buffer deve ser grande o suficiente para receber o struct que corresponde ao tipo SQL.

Para os parâmetros SQL_SS_TIME2 e SQL_SS_TIMESTAMPOFFSET, o driver converterá valores C em valores sql_variant , conforme descrito 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

Scale é definido como SQL_DESC_PRECISION (o parâmetro DecimalDigits de SQLBindParameter).
SQL_C_BINARY datetimeoffset SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIMESTAMPOFFSET

Scale é definido 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 Scale é definido 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).

Conjunto de dimensionamento 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

Confira também

Aprimoramentos de data e hora (ODBC)