Tipi CLR definiti dall'utente di grandi dimensioni (ODBC)
Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)
Importante
SQL Server Native Client (SNAC) non viene fornito con:
- SQL Server 2022 (16.x) e versioni successive
- SQL Server Management Studio 19 e versioni successive
SQL Server Native Client (SQLNCLI o SQLNCLI11) e il provider Microsoft OLE DB legacy per SQL Server (SQLOLEDB) non sono consigliati per lo sviluppo di nuove applicazioni.
Per i nuovi progetti, usare uno dei driver seguenti:
Per SQLNCLI fornito come componente del motore di database di SQL Server (versioni dal 2012 al 2019), vedere questa Eccezione relativa al ciclo di vita del supporto.
In questo argomento vengono illustrate le modifiche apportate a ODBC in SQL Server Native Client per supportare i tipi CLR (Common Language Runtime) definiti dall'utente (UDT) di grandi dimensioni.
Per un esempio che mostra il supporto ODBC per tipi definiti dall'utente CLR di grandi dimensioni, vedere Supporto per tipi definiti dall'utente di grandi dimensioni.
Per altre informazioni sul supporto per tipi CLR definiti dall'utente di grandi dimensioni in SQL Server Native Client, vedere Tipi CLR definiti dall'utente di grandi dimensioni.
Formato dati
SQL Server Native Client utilizza SQL_SS_LENGTH_UNLIMITED per indicare che le dimensioni di una colonna sono maggiori di 8.000 byte per i tipi LOB (Large Object). A partire da SQL Server 2008, lo stesso valore viene utilizzato per i tipi CLR definiti dall'utente quando le dimensioni sono maggiori di 8.000 byte.
I valori dei tipi definiti dall'utente vengono rappresentati come matrici di byte. Le conversioni da e verso le stringhe esadecimali sono supportate. I valori letterali vengono rappresentati come stringhe esadecimali con il prefisso "0x".
Nella tabella seguente viene illustrato il mapping dei tipi di dati nei parametri e nei set di risultati:
Tipo di dati di SQL Server | Tipo di dati SQL | Valore |
---|---|---|
tipo CLR definito dall'utente | SQL_SS_UDT | -151 (sqlncli.h) |
Nella tabella seguente vengono illustrati il tipo ODBC C e la struttura corrispondente. Essenzialmente, CLR UDT è un tipo varbinary con metadati aggiuntivi.
Tipo di dati SQL | Layout in memoria | tipo di dati C | Valore (sqlext.h) |
---|---|---|---|
SQL_SS_UDT | SQLCHAR *(unsigned char *) | SQL_C_BINARY | SQL_BINARY (-2) |
Campi di descrizione per i parametri
Di seguito sono riportate le informazioni restituite nei campi IPD:
Campo di descrizione | SQL_SS_UDT (lunghezza minore o uguale a 8.000 byte) |
SQL_SS_UDT (lunghezza maggiore di 8.000 byte) |
---|---|---|
SQL_DESC_CASE_SENSITIVE | SQL_FALSE | SQL_FALSE |
SQL_DESC_CONCISE_TYPE | SQL_SS_UDT | SQL_SS_UDT |
SQL_DESC_DATETIME_INTERVAL_CODE | 0 | 0 |
SQL_DESC_DATETIME_INTERVAL_PRECISION | n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_FIXED_PREC_SCALE | SQL_FALSE | SQL_FALSE |
SQL_DESC_LENGTH | n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_LOCAL_TYPE_NAME | "udt" | "udt" |
SQL_DESC_OCTET_LENGTH | n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_PRECISION | n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_SCALE | 0 | 0 |
SQL_DESC_TYPE | SQL_SS_UDT | SQL_SS_UDT |
SQL_DESC_TYPE_NAME | "udt" | "udt" |
SQL_DESC_UNSIGNED | SQL_TRUE | SQL_TRUE |
SQL_CA_SS_UDT_CATALOG_NAME | Nome del catalogo che contiene il tipo definito dall'utente. | Nome del catalogo che contiene il tipo definito dall'utente. |
SQL_CA_SS_UDT_SCHEMA_NAME | Nome dello schema che contiene il tipo definito dall'utente. | Nome dello schema che contiene il tipo definito dall'utente. |
SQL_CA_SS_UDT_TYPE_NAME | Nome del tipo definito dall'utente. | Nome del tipo definito dall'utente. |
SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME | Nome completo del tipo definito dall'utente. | Nome completo del tipo definito dall'utente. |
Per i parametri del tipo definito dall'utente, SQL_CA_SS_UDT_TYPE_NAME deve essere sempre impostato tramite SQLSetDescField. SQL_CA_SS_UDT_CATALOG_NAME e SQL_CA_SS_UDT_SCHEMA_NAME sono facoltativi.
Se il tipo definito dall'utente viene definito nello stesso database con uno schema diverso rispetto alla tabella, è necessario impostare SQL_CA_SS_UDT_SCHEMA_NAME.
Se il tipo definito dall'utente viene definito in un database diverso rispetto alla tabella, è necessario impostare SQL_CA_SS_UDT_CATALOG_NAME e SQL_CA_SS_UDT_SCHEMA_NAME.
Se sono presenti errori o omissioni nelle impostazioni per SQL_CA_SS_UDT_TYPE_NAME, SQL_CA_SS_UDT_CATALOG_NAME o SQL_CA_SS_UDT_SCHEMA_NAME, viene generato un record di diagnostica con l'identificativo SQLSTATE HY000 e il testo del messaggio specifico del server.
Campi di descrizione per i risultati
Di seguito sono riportate le informazioni restituite nei campi IRD:
Campo di descrizione | SQL_SS_UDT (lunghezza minore o uguale a 8.000 byte) |
SQL_SS_UDT (lunghezza maggiore di 8.000 byte) |
---|---|---|
SQL_DESC_AUTO_UNIQUE_VALUE | SQL_FALSE | SQL_FALSE |
SQL_DESC_CASE_SENSITIVE | SQL_FALSE | SQL_FALSE |
SQL_DESC_CONCISE_TYPE | SQL_SS_UDT | SQL_SS_UDT |
SQL_DESC_DATETIME_INTERVAL_CODE | 0 | 0 |
SQL_DESC_DATETIME_INTERVAL_PRECISION | n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_DISPLAY_SIZE | 2n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_FIXED_PREC_SCALE | SQL_FALSE | SQL_FALSE |
SQL_DESC_LENGTH | n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_LITERAL_PREFIX | "0x" | "0x" |
SQL_DESC_LITERAL_SUFFIX | "" | "" |
SQL_DESC_LOCAL_TYPE_NAME | "udt" | "udt" |
SQL_DESC_OCTET_LENGTH | n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_PRECISION | n | SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_SCALE | 0 | 0 |
SQL_DESC_SEARCHABLE | SQL_PRED_NONE | SQL_PRED_NONE |
SQL_DESC_TYPE | SQL_SS_UDT | SQL_SS_UDT |
SQL_DESC_TYPE_NAME | "udt" | "udt" |
SQL_DESC_UNSIGNED | SQL_TRUE | SQL_TRUE |
SQL_CA_SS_UDT_CATALOG_NAME | Nome del catalogo che contiene il tipo definito dall'utente. | Nome del catalogo che contiene il tipo definito dall'utente. |
SQL_CA_SS_UDT_SCHEMA_NAME | Nome dello schema che contiene il tipo definito dall'utente. | Nome dello schema che contiene il tipo definito dall'utente. |
SQL_CA_SS_UDT_TYPE_NAME | Nome del tipo definito dall'utente. | Nome del tipo definito dall'utente. |
SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME | Nome completo del tipo definito dall'utente. | Nome completo del tipo definito dall'utente. |
Metadati della colonna restituiti da SQLColumns e SQLProcedureColumns (metadati del catalogo)
Per i tipi di dati definiti dall'utente vengono restituiti i valori di colonna seguenti:
Nome colonna | SQL_SS_UDT (lunghezza minore o uguale a 8.000 byte) |
SQL_SS_UDT (lunghezza maggiore di 8.000 byte) |
---|---|---|
DATA_TYPE | SQL_SS_UDT | SQL_SS_UDT |
TYPE_NAME | Nome del tipo definito dall'utente. | Nome del tipo definito dall'utente. |
COLUMN_SIZE | n | SQL_SS_LENGTH_UNLIMITED (0) |
BUFFER_LENGTH | n | SQL_SS_LENGTH_UNLIMITED (0) |
DECIMAL_DIGITS | NULL | NULL |
SQL_DATA_TYPE | SQL_SS_UDT | SQL_SS_UDT |
SQL_DATETIME_SUB | NULL | NULL |
CHAR_OCTET_LENGTH | n | SQL_SS_LENGTH_UNLIMITED (0) |
SS_UDT_CATALOG_NAME | Nome del catalogo che contiene il tipo definito dall'utente. | Nome del catalogo che contiene il tipo definito dall'utente. |
SS_UDT_SCHEMA_NAME | Nome dello schema che contiene il tipo definito dall'utente. | Nome dello schema che contiene il tipo definito dall'utente. |
SS_UDT_ASSEMBLY_TYPE_NAME | Nome completo del tipo definito dall'utente. | Nome completo del tipo definito dall'utente. |
Le ultime tre colonne sono specifiche del driver. Vengono aggiunte dopo qualsiasi colonna definita da ODBC, ma prima di qualsiasi colonna specifica del driver esistente del set di risultati di SQLColumns o SQLProcedureColumns.
Nessuna riga viene restituita da SQLGetTypeInfo, per singoli tipi definiti dall'utente o per il tipo generico "udt".
Associazioni e conversioni
Di seguito sono riportate le conversioni supportate dai tipi di dati SQL ai tipi di dati C:
Conversione da e verso: | SQL_SS_UDT |
---|---|
SQL_C_WCHAR | Supportato* |
SQL_C_BINARY | Supportata |
SQL_C_CHAR | Supportato* |
* I dati binari vengono convertiti in una stringa esadecimale.
Di seguito sono riportate le conversioni supportate dai tipi di dati C ai tipi di dati SQL:
Conversione da e verso: | SQL_SS_UDT |
---|---|
SQL_C_WCHAR | Supportato* |
SQL_C_BINARY | Supportata |
SQL_C_CHAR | Supportato* |
* Si verifica la conversione da stringa esadecimale a dati binari.
Supporto di SQL_VARIANT per i tipi definiti dall'utente
I tipi definiti dall'utente non sono supportati nelle colonne SQL_VARIANT.
Supporto di BCP per i tipi definiti dall'utente
I valori dei tipi definiti dall'utente possono essere importati ed esportati solo come caratteri o valori binari.
Comportamento dei client legacy per i tipi definiti dall'utente
I tipi definiti dall'utente sono soggetti al mapping dei tipi con i client legacy nel modo seguente:
Versione del server | SQL_SS_UDT (lunghezza minore o uguale a 8.000 byte) |
SQL_SS_UDT (lunghezza maggiore di 8.000 byte) |
---|---|---|
SQL Server 2005 | UDT | varbinary(max) |
SQL Server 2008 e versioni successive | UDT | UDT |
Funzioni ODBC che supportano i tipi CLR definiti dall'utente di grandi dimensioni
In questa sezione vengono illustrate le modifiche apportate alle funzioni ODBC di SQL Server Native Client per supportare i tipi CLR definiti dall'utente di grandi dimensioni.
SQLBindCol
I valori delle colonne dei risultati del tipo definito dall'utente vengono convertiti da SQL a tipi di dati C, come descritto nella sezione "Binding e conversioni", più indietro in questo argomento.
SQLBindParameter
I valori necessari per i tipi definiti dall'utente sono i seguenti:
Tipo di dati SQL | Parametrotype | ColumnSizePtr | DecimalDigitsPtr |
---|---|---|---|
SQL_SS_UDT (lunghezza minore o uguale a 8.000 byte) |
SQL_SS_UDT | n | 0 |
SQL_SS_UDT (lunghezza maggiore di 8.000 byte) |
SQL_SS_UDT | SQL_SS_LENGTH_UNLIMITED (0) | 0 |
SQLColAttribute
I valori restituiti per i tipi definiti dall'utente sono uguali a quelli descritti nella sezione "Campi di descrizione per i risultati" riportata in precedenza in questo argomento.
SQLColumns
I valori restituiti per i tipi definiti dall'utente sono uguali a quelli descritti nella sezione "Metadati della colonna restituiti da SQLColumns e SQLProcedureColumns (metadati del catalogo)" riportata in precedenza in questo argomento.
SQLDescribeCol
I valori restituiti per i tipi definiti dall'utente sono i seguenti:
Tipo di dati SQL | DataTypePtr | ColumnSizePtr | DecimalDigitsPtr |
---|---|---|---|
SQL_SS_UDT (lunghezza minore o uguale a 8.000 byte) |
SQL_SS_UDT | n | 0 |
SQL_SS_UDT (lunghezza maggiore di 8.000 byte) |
SQL_SS_UDT | SQL_SS_LENGTH_UNLIMITED (0) | 0 |
SQLDescribeParam
I valori restituiti per i tipi definiti dall'utente sono i seguenti:
Tipo di dati SQL | DataTypePtr | ColumnSizePtr | DecimalDigitsPtr |
---|---|---|---|
SQL_SS_UDT (lunghezza minore o uguale a 8.000 byte) |
SQL_SS_UDT | n | 0 |
SQL_SS_UDT (lunghezza maggiore di 8.000 byte) |
SQL_SS_UDT | SQL_SS_LENGTH_UNLIMITED (0) | 0 |
SQLFetch
I valori delle colonne dei risultati del tipo definito dall'utente vengono convertiti da SQL a tipi di dati C, come descritto nella sezione "Binding e conversioni", più indietro in questo argomento.
SQLFetchScroll
I valori delle colonne dei risultati del tipo definito dall'utente vengono convertiti da SQL a tipi di dati C, come descritto nella sezione "Binding e conversioni", più indietro in questo argomento.
SQLGetData
I valori delle colonne dei risultati del tipo definito dall'utente vengono convertiti da SQL a tipi di dati C, come descritto nella sezione "Binding e conversioni", più indietro in questo argomento.
SQLGetDescField
I campi di descrizione disponibili con i nuovi tipi sono descritti nelle sezioni "Campi di descrizione per i parametri" e "Campi di descrizione per i risultati" riportate in precedenza in questo argomento.
SQLGetDescRec
I valori restituiti per i tipi definiti dall'utente sono i seguenti:
Tipo di dati SQL | Type | Sottotipo | Durata | Precisione | Ridimensiona |
---|---|---|---|---|---|
SQL_SS_UDT (lunghezza minore o uguale a 8.000 byte) |
SQL_SS_UDT | 0 | n | n | 0 |
SQL_SS_UDT (lunghezza maggiore di 8.000 byte) |
SQL_SS_UDT | 0 | SQL_SS_LENGTH_UNLIMITED (0) | SQL_SS_LENGTH_UNLIMITED (0) | 0 |
SQLGetTypeInfo
I valori restituiti per i tipi definiti dall'utente sono uguali a quelli descritti nella sezione "Metadati della colonna restituiti da SQLColumns e SQLProcedureColumns (metadati del catalogo)" riportata in precedenza in questo argomento.
SQLProcedureColumns
I valori restituiti per i tipi definiti dall'utente sono uguali a quelli descritti nella sezione "Metadati della colonna restituiti da SQLColumns e SQLProcedureColumns (metadati del catalogo)" riportata in precedenza in questo argomento.
SQLPutData
I valori dei parametri UDT vengono convertiti da C a tipi di dati SQL, come descritto nella sezione "Binding e conversioni", più indietro in questo argomento.
SQLSetDescField
I campi di descrizione disponibili con i nuovi tipi sono descritti nelle sezioni "Campi di descrizione per i parametri" e "Campi di descrizione per i risultati" riportate in precedenza in questo argomento.
SQLSetDescRec
I valori consentiti per i tipi definiti dall'utente sono i seguenti:
Tipo di dati SQL | Type | Sottotipo | Durata | Precisione | Ridimensiona |
---|---|---|---|---|---|
SQL_SS_UDT (lunghezza minore o uguale a 8.000 byte) |
SQL_SS_UDT | 0 | n | n | 0 |
SQL_SS_UDT (lunghezza maggiore di 8.000 byte) |
SQL_SS_UDT | 0 | SQL_SS_LENGTH_UNLIMITED (0) | SQL_SS_LENGTH_UNLIMITED (0) | 0 |
SQLSpecialColumns
I valori restituiti per i tipi di dati definiti dall'utente delle colonne DATA_TYPE, TYPE_NAME, COLUMN_SIZE, BUFFER_LENGTH e DECIMAL_DIGTS sono uguali a quelli descritti nella sezione "Metadati della colonna restituiti da SQLColumns e SQLProcedureColumns (metadati del catalogo)" riportata in precedenza in questo argomento.