Tipi CLR definiti dall'utente di grandi dimensioni (ODBC)
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 in cui viene illustrato il supporto ODBC per i tipi CLR definiti dall'utente di grandi dimensioni, vedere Supporto per tipi definiti dall'utente di grandi dimensioni.
Per ulteriori informazioni sul supporto dei tipi CLR definiti dall'utente di grandi dimensioni in SQL Server Native Client, vedere Tipi CLR definiti dall'utente di grandi dimensioni.
Formato dei 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 |
---|---|---|
CLR UDT |
SQL_SS_UDT |
-151 (sqlncli.h) |
Nella tabella seguente vengono illustrati il tipo ODBC C e la struttura corrispondente. Essenzialmente, il tipo CLR definito dall'utente è 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 dei tipi definiti 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 le colonne definite da ODBC, ma prima delle colonne esistenti specifiche del driver del set di risultati di SQLColumns o SQLProcedureColumns.
Non viene restituita alcuna riga da SQLGetTypeInfo per i 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 |
Supportata * |
SQL_C_BINARY |
Supportato |
SQL_C_CHAR |
Supportata * |
* 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 |
Supportata * |
SQL_C_BINARY |
Supportato |
SQL_C_CHAR |
Supportata * |
* Viene eseguita la conversione da stringa esadecimale in 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 della colonna dei risultati dei tipi definiti dall'utente vengono convertiti dai tipi di dati SQL ai tipi di dati C come descritto nella sezione "Associazioni e conversioni" riportata in precedenza 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 della colonna dei risultati dei tipi definiti dall'utente vengono convertiti dai tipi di dati SQL ai tipi di dati C come descritto nella sezione "Associazioni e conversioni" riportata in precedenza in questo argomento.
SQLFetchScroll
I valori della colonna dei risultati dei tipi definiti dall'utente vengono convertiti dai tipi di dati SQL ai tipi di dati C come descritto nella sezione "Associazioni e conversioni" riportata in precedenza in questo argomento.
SQLGetData
I valori della colonna dei risultati dei tipi definiti dall'utente vengono convertiti dai tipi di dati SQL ai tipi di dati C come descritto nella sezione "Associazioni e conversioni" riportata in precedenza 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 |
Precisione |
Scala |
---|---|---|---|---|---|
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 dei tipi definiti dall'utente vengono convertiti dai tipi di dati C ai tipi di dati SQL come descritto nella sezione "Associazioni e conversioni" riportata in precedenza 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 |
Precisione |
Scala |
---|---|---|---|---|---|
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.