Udostępnij za pośrednictwem


Duże CLR typów zdefiniowanych przez użytkownika (ODBC)

W tym temacie omówiono zmiany ODBC w SQL Server Native Client do obsługi dużych language runtime (CLR) użytkownika typowych (UDTs).

Aby uzyskać więcej informacji na temat obsługi dużych UDTs CLR w SQL Server Native Client, zobacz Duże CLR typów zdefiniowanych przez użytkownika.

Format danych

SQL Server Native Client używa SQL_SS_LENGTH_UNLIMITED, oznaczający, że rozmiar kolumna jest większa niż 8000 bajtów dla typów dużych obiektów (LOB).Począwszy od programu SQL Server 2008, sama wartość jest używana dla CLR UDTs podczas ich rozmiar jest większy niż 8000 bajtów.

UDT wartości są reprezentowane jako tablice bajtów.Konwersja z ciągów znaków szesnastkowych i są obsługiwane.Wartości literałów są reprezentowane jako ciąg szesnastkowy z prefiksem "0 x".

W poniższej tabela przedstawiono mapowanie typu danych i zestawach wyników w parametrach:

Typ danych programu SQL Server

Typ danych SQL

Wartość

CLR UDT

SQL_SS_UDT

-151 (sqlncli.h)

W tabela poniżej omówiono odpowiedniej struktury i typu ODBC C.CLR UDT to zasadniczo varbinary typu z dodatkowych metadane.

Typ danych SQL

Układ pamięci

Typ danych c

Wartość (sqlext.h)

SQL_SS_UDT

SQLCHAR *(unsigned char *)

SQL_C_BINARY

SQL_BINARY-(2)

Deskryptor pól parametrów

Informacje zwrócone w polach IPD jest następująca:

pole deskryptora

SQL_SS_UDT

(długość mniejszej lub równej 8000 bajtów)

SQL_SS_UDT

(długości większej niż 8000 bajtów)

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

Nazwa katalogu, zawierającego UDT.

Nazwa katalogu, zawierającego UDT.

SQL_CA_SS_UDT_SCHEMA_NAME

Nazwa schematu, który zawiera UDT.

Nazwa schematu zawiera UDT.

SQL_CA_SS_UDT_TYPE_NAME

Nazwa UDT.

Nazwa UDT.

SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME

Pełna nazwa UDT.

Pełna nazwa UDT.

Dla parametrów UDT SQL_CA_SS_UDT_TYPE_NAME musi być zawsze zestaw przez SQLzestawDescField.SQL_CA_SS_UDT_CATALOG_NAME i SQL_CA_SS_UDT_SCHEMA_NAME są opcjonalne.

Jeśli UDT jest zdefiniowana w tej samej bazy danych ze schematem inny niż tabela, musi być SQL_CA_SS_UDT_SCHEMA_NAME zestaw.

Jeżeli UDT jest zdefiniowany w innej bazie danych niż tabela, SQL_CA_SS_UDT_CATALOG_NAME i SQL_CA_SS_UDT_SCHEMA_NAME muszą być zestaw.

Jeśli istnieją błędy lub przeoczenia w ustawienia dla SQL_CA_SS_UDT_TYPE_NAME, SQL_CA_SS_UDT_CATALOG_NAME lub SQL_CA_SS_UDT_SCHEMA_NAME, diagnostyczne rekord jest generowany z SQLSTATE HY000 i tekst komunikatu specyficznych dla serwera.

Wyniki pola deskryptora

Informacje zwrócone w polach IRD jest następująca:

pole deskryptora

SQL_SS_UDT

(długość mniejszej lub równej 8000 bajtów)

SQL_SS_UDT

(długości większej niż 8000 bajtów)

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

"0 x"

"0 x"

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

Nazwa katalogu, zawierającego UDT.

Nazwa katalogu, zawierającego UDT.

SQL_CA_SS_UDT_SCHEMA_NAME

Nazwa schematu, który zawiera UDT.

Nazwa schematu, który zawiera UDT.

SQL_CA_SS_UDT_TYPE_NAME

Nazwa UDT.

Nazwa UDT.

SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME

Pełna nazwa UDT.

Pełna nazwa UDT.

Metadane kolumn zwracanych przez SQLColumns i SQLProcedureColumns (katalog metadane)

Następujące kolumna wartości są zwracane dla UDTs:

Nazwa kolumny

SQL_SS_UDT

(długość mniejszej lub równej 8000 bajtów)

SQL_SS_UDT

(długości większej niż 8000 bajtów)

DATA_TYPE

SQL_SS_UDT

SQL_SS_UDT

TYPE_NAME

Nazwa UDT.

Nazwa UDT.

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

Nazwa katalogu, zawierającego UDT.

Nazwa katalogu, zawierającego UDT.

SS_UDT_SCHEMA_NAME

Nazwa schematu, który zawiera UDT.

Nazwa schematu, który zawiera UDT.

SS_UDT_ASSEMBLY_TYPE_NAME

Pełna nazwa UDT.

Pełna nazwa UDT.

Ostatnie trzy kolumny są specyficzne dla sterownika kolumn.Są one dodawane po dowolnej kolumny zdefiniowane przez ODBC, ale przed istniejących kolumn zestaw wyników specyficzne dla sterownika SQLColumns lub SQLProcedureColumns.

Wiersze nie są zwracane przez SQLGetTypeInfo, UDTs indywidualne lub typu rodzajowego "udt".

Konwersje i powiązania

Obsługiwane konwersje z SQL do c typy danych są następujące:

Konwersja z i:

SQL_SS_UDT

SQL_C_WCHAR

Obsługiwane *

SQL_C_BINARY

Obsługiwane

SQL_C_CHAR

Obsługiwane *

* Binarnych danych jest konwertowana na ciąg szesnastkowy.

Obsługiwane konwersje od c do typów danych SQL są następujące:

Konwersja z i:

SQL_SS_UDT

SQL_C_WCHAR

Obsługiwane *

SQL_C_BINARY

Obsługiwane

SQL_C_CHAR

Obsługiwane *

* Występuje ciąg szesnastkowy do konwersji danych binarnych.

Obsługa sql_variant UDTs

UDTs nie są obsługiwane w kolumnach typu SQL_VARIANT.

Obsługa UDTs BCP

Wartości UDTs można przywożonych i wywożonych tylko jako znak lub wartości binarnych.

Zachowanie klientów niższych poziomów dla UDTs

UDTs podlegają mapowania typu z niedziałający-poziom klientów, jak następuje:

Wersja serwera

SQL_SS_UDT

(długość mniejszej lub równej 8000 bajtów)

SQL_SS_UDT

(długości większej niż 8000 bajtów)

SQL Server 2000

varbinary

image

SQL Server 2005

UDT

varbinary(max)

SQL Server 2008

UDT

UDT

ODBC funkcje obsługi dużych CLR UDTs

W tej sekcji omówiono zmiany funkcji ODBC macierzystym klienta programu SQL Server do obsługi dużych UDTs CLR.

Procedura SQLBindCol

UDT wynik kolumna wartości są konwertowane z SQL C typy danych jako zgodnie z opisem w "Powiązania i konwersje" sekcja wcześniej w tym temacie.

SQLBindParameter

Wartości wymagane dla UDTs są następujące:

Typ danych SQL

Parametertype

ColumnSizePtr

DecimalDigitsPtr

SQL_SS_UDT

(długość mniejszej lub równej 8000 bajtów)

SQL_SS_UDT

n

0

SQL_SS_UDT

(długości większej niż 8000 bajtów)

SQL_SS_UDT

SQL_SS_LENGTH_UNLIMITED (0)

0

SQLColAttribute

Wartości zwracane dla UDTs są opisane w "Deskryptora pól dla wyników" sekcja wcześniej w tym temacie.

SQLColumns

Wartości zwracane dla UDTs są opisane w "kolumny metadanych zwrócona przez SQLColumns i SQLProcedureColumns (katalog metadane)" sekcja wcześniej w tym temacie.

SQLDescribeCol

Wartości zwracane dla UDTs są następujące:

Typ danych SQL

DataTypePtr

ColumnSizePtr

DecimalDigitsPtr

SQL_SS_UDT

(długość mniejszej lub równej 8000 bajtów)

SQL_SS_UDT

n

0

SQL_SS_UDT

(długości większej niż 8000 bajtów)

SQL_SS_UDT

SQL_SS_LENGTH_UNLIMITED (0)

0

SQLDescribeParam

Wartości zwracane dla UDTs są następujące:

Typ danych SQL

DataTypePtr

ColumnSizePtr

DecimalDigitsPtr

SQL_SS_UDT

(długość mniejszej lub równej 8000 bajtów)

SQL_SS_UDT

n

0

SQL_SS_UDT

(długości większej niż 8000 bajtów)

SQL_SS_UDT

SQL_SS_LENGTH_UNLIMITED (0)

0

SQLFetch

UDT wynik kolumna wartości są konwertowane z SQL C typy danych jako zgodnie z opisem w "Powiązania i konwersje" sekcja wcześniej w tym temacie.

SQLFetchScroll

UDT wynik kolumna wartości są konwertowane z SQL C typy danych jako zgodnie z opisem w "Powiązania i konwersje" sekcja wcześniej w tym temacie.

Procedura SQLGetData

UDT wynik kolumna wartości są konwertowane z SQL C typy danych jako zgodnie z opisem w "Powiązania i konwersje" sekcja wcześniej w tym temacie.

SQLGetDescField

Pola deskryptora dostępne nowe typy są opisane w "Deskryptora pól dla parametrów" i "Pola deskryptora wyniki" sekcje wcześniej w tym temacie.

SQLGetDescRec

Wartości zwracane dla UDTs są następujące:

Typ danych SQL

Typ

Podtyp

Długość

Precision

Skala

SQL_SS_UDT

(długość mniejszej lub równej 8000 bajtów)

SQL_SS_UDT

0

n

n

0

SQL_SS_UDT

(długości większej niż 8000 bajtów)

SQL_SS_UDT

0

SQL_SS_LENGTH_UNLIMITED (0)

SQL_SS_LENGTH_UNLIMITED (0)

0

SQLGetTypeInfo

Wartości zwracane dla UDTs są opisane w "Metadanych zwrócona przez SQLColumns i SQLProcedureColumns (katalog metadane)" sekcja wcześniej w tym temacie.

SQLProcedureColumns

Wartości zwracane dla UDTs są opisane w "Metadanych zwrócona przez SQLColumns i SQLProcedureColumns (katalog metadane)" sekcja wcześniej w tym temacie.

SQLPutData

Wartości parametrów UDT są konwertowane c na typy danych SQL jako zgodnie z opisem w "Powiązania i konwersje" sekcja wcześniej w tym temacie.

SQLSetDescField

Pole deskryptora dostępne nowe typy są opisane w "Deskryptora pól dla parametrów" i "Pola deskryptora wyniki" sekcje wcześniej w tym temacie.

SQLSetDescRec

Wartości dopuszczalne dla UDTs są następujące:

Typ danych SQL

Typ

Podtyp

Długość

Precision

Skala

SQL_SS_UDT

(długość mniejszej lub równej 8000 bajtów)

SQL_SS_UDT

0

n

n

0

SQL_SS_UDT

(długości większej niż 8000 bajtów)

SQL_SS_UDT

0

SQL_SS_LENGTH_UNLIMITED (0)

SQL_SS_LENGTH_UNLIMITED (0)

0

SQLSpecialColumns

Wartości zwracane dla kolumn, DATA_TYPE, TYPE_NAME, COLUMN_SIZE, BUFFER_LENGTH i DECIMAL_DIGTS UDTs są opisane w "Metadanych zwrócona przez SQLColumns i SQLProcedureColumns (katalog metadane)" sekcja wcześniej w tym temacie.