Supporto sql_variant per i tipi di data e ora

Si applica a:SQL ServerDatabase SQL diAzure Istanzagestita di SQL di Azure Azure Synapse Analytics PlatformSystem (PDW)

In questo argomento viene descritto come il tipo di dati sql_variant supporta funzionalità avanzate di data e ora.

L'attributo della colonna SQL_CA_SS_VARIANT_TYPE è utilizzato per restituire il tipo C di una colonna dei risultati variant. SQL Server 2008 (10.0.x) introduce un attributo aggiuntivo, SQL_CA_SS_VARIANT_SQL_TYPE, che imposta il tipo SQL di una colonna di risultato variante nel descrittore di riga di implementazione (IRD). SQL_CA_SS_VARIANT_SQL_TYPE può essere usato anche nel descrittore di parametri di implementazione (IPD) per specificare il tipo SQL di un parametro SQL_SS_TIME2 o SQL_SS_TIMESTAMPOFFSET con SQL_C_BINARY tipo 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 altre informazioni, vedere Conversioni da SQL a C. Quando si esegue l'associazione a SQL_C_BINARY, la lunghezza del buffer deve essere sufficientemente grande per ricevere lo struct corrispondente 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 di 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 scalabilità è impostata su SQL_DESC_PRECISION (il parametro DecimalDigits di SQLBindParameter).
SQL_C_BINARY datetimeoffset SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIMESTAMPOFFSET

La scalabilità è 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 scalabilità è impostata su SQL_DESC_PRECISION (il parametro DecimalDigits di SQLBindParameter).
SQL_C_NUMERIC decimale La precisione è impostata su SQL_DESC_PRECISION (il parametro ColumnSize di SQLBindParameter).

Set di scalabilità su SQL_DESC_SCALE (parametro DecimalDigits di SQLBindParameter).
SQL_C_SS_TIME2 time SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato
SQL_C_SS_TIMESTAMPOFFSET datetimeoffset SQL_CA_SS_VARIANT_SQL_TYPE viene ignorato

Vedi anche

Miglioramenti relativi a data e ora (ODBC)