Tipi CLR definiti dall'utente di grandi dimensioni (ODBC)

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

Importante

SQL Server Native Client (spesso abbreviato SNAC) è stato rimosso da SQL Server 2022 (16.x) e SQL Server Management Studio 19 (SSMS). 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. Passare al nuovo Microsoft OLE DB Driver (MSOLEDBSQL) per SQL Server o alla versione più recente di Microsoft ODBC Driver per SQL Server . Per SQLNCLI fornito come componente del motore di database di SQL Server (versioni da 2012 a 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 Supportato
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 Supportato
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 Parametertype 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 Tipo Sottotipo Lunghezza Precision 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 Tipo Sottotipo Lunghezza Precision 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.

Vedi anche

Tipi CLR definiti dall'utente di grandi dimensioni