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.