Supporto sql_variant per i tipi date/time

In questo argomento viene illustrato come il tipo di dati sql_variant supporta la funzionalità avanzata di data e ora.

L'attributo di colonna SQL_CA_SS_VARIANT_TYPE viene utilizzato per restituire il tipo C di una colonna di risultati variant. SQL Server 2008 ha introdotto un attributo aggiuntivo, SQL_CA_SS_VARIANT_SQL_TYPE, che imposta il tipo SQL di una colonna di risultati variant nel descrittore della riga di implementazione (IRD, Implementation Row Descriptor). SQL_CA_SS_VARIANT_SQL_TYPE può essere utilizzato anche nel descrittore del parametro di implementazione (IPD, Implementation Parameter Descriptor ) per specificare il tipo SQL di un parametro SQL_SS_TIME2 o SQL_SS_TIMESTAMPOFFSET nel quale il tipo SQL_C_BINARY C è associato al tipo SQL_SS_VARIANT.

I nuovi tipi SQL_SS_TIME2 e SQL_SS_TIMESTAMPOFFSET possono essere impostati da SQLColAttribute. SQL_CA_SS_VARIANT_SQL_TYPE può essere restituito da SQLGetDescField.

Per le colonne dei risultati, il driver convertirà i tipi da variant a date/time. Per ulteriori informazioni, vedere Conversioni dai tipi di dati SQL ai tipi di dati C. In caso di associazione a SQL_C_BINARY, la lunghezza dei buffer deve essere sufficiente a consentire la ricezione della struttura che corrisponde al tipo SQL.

Per i parametri SQL_SS_TIME2 e SQL_SS_TIMESTAMPOFFSET, il driver convertirà i valori C in valori sql_variant, come descritto nella tabella seguente. Se un parametro viene associato come SQL_C_BINARY e il tipo di server è SQL_SS_VARIANT, verrà trattato come valore binario, a meno che l'applicazione non abbia impostato SQL_CA_SS_VARIANT_SQL_TYPE su un tipo SQL diverso. In questo caso SQL_CA_SS_VARIANT_SQL_TYPE ha la precedenza, ovvero se è impostato SQL_CA_SS_VARIANT_SQL_TYPE, viene ignorato il comportamento predefinito che consiste nel dedurre il tipo SQL variant dal tipo C.

Tipo C

Tipo server

Commenti

SQL_C_CHAR

varchar

SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato.

SQL_C_WCHAR

nvarcar

SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato.

SQL_C_TINYINT

smallint

SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato.

SQL_C_STINYINT

smallint

SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato.

SQL_C_SHORT

smallint

SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato.

SQL_C_SSHORT

smallint

SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato.

SQL_C_USHORT

int

SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato.

SQL_C_LONG

int

SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato.

SQL_C_SLONG

int

SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato.

SQL_C_ULONG

bigint

SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato.

SQL_C_SBIGINT

bigint

SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato.

SQL_C_FLOAT

real

SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato.

SQL_C_DOUBLE

float

SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato.

SQL_C_BIT

bit

SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato.

SQL_C_UTINYINT

tinyint

SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato.

SQL_C_BINARY

varbinary

SQL_CA_SS_VARIANT_SQL_TYPE non è impostato.

SQL_C_BINARY

time

SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIME2

La scala è impostata su SQL_DESC_PRECISION (il parametro DecimalDigits di SQLBindParameter).

SQL_C_BINARY

datetimeoffset

SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIMESTAMPOFFSET

La scala è impostata su SQL_DESC_PRECISION (il parametro DecimalDigits di SQLBindParameter).

SQL_C_TYPE_DATE

date

SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato.

SQL_C_TYPE_TIME

time(0)

SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato.

SQL_C_TYPE_TIMESTAMP

datetime2

La scala è impostata su SQL_DESC_PRECISION (il parametro DecimalDigits di SQLBindParameter).

SQL_C_NUMERIC

decimal

La precisione è impostata su SQL_DESC_PRECISION (il parametro ColumnSize di SQLBindParameter).

Scala impostata su SQL_DESC_SCALE (il parametro DecimalDigits di SQLBindParameter).