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). |