Condividi tramite


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

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

Supportata

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

Supportata

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 2000

varbinary

image

SQL Server 2005

UDT

varbinary(max)

SQL Server 2008

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.