Udostępnij za pośrednictwem


Typy zdefiniowane przez użytkownika

SQL Server 2005 wprowadzone przez użytkownika typów (UDTs).UDTs rozszerzenie systemu typ SQL, umożliwiając przechowywanie obiektów i struktur danych niestandardowych w SQL Server bazy danych.UDTs może zawierać wiele typów danych i może mieć zachowań, różnicując je z tradycyjnych alias typów danych, które składają się z pojedynczego SQL Server typu danych systemu.UDTs są definiowane przy użyciu dowolnej języki obsługiwane przez.NET wykonywalnych języka wspólnego (CLR) produkują sprawdzalne kodu.Obejmuje to Microsoft Visual C#® i Visual Basic® .NET.Dane jest ujawniona jako pola i właściwości.NET klasy lub struktury i zachowania są definiowane za pomocą metod klasy lub struktury.

A UDT może być używany jako definicja kolumna tabela, jako zmienna w Transact-SQL partia, albo jako argument Transact-SQL funkcja lub procedura składowana.Aby uzyskać więcej informacji o UDTs, zobacz Praca z CLR typów zdefiniowanych przez użytkownika.

Dostawca OLE DB programu SQL Server Native Client

SQL Server Macierzystego klienta dostawca OLE DB obsługuje UDTs jako binarne typy informacji metadane, które umożliwia zarządzanie UDTs jako obiekty.Kolumny UDT narażeni są jako DBTYPE_UDT i ich metadane są dostępne za pośrednictwem interfejs OLE DB core IColumnRowset, a nowe ISSCommandWithParameters interfejs.

Ostrzeżenie

IRowsetFind::FindNextRow metoda nie działa z typem danych UDT.DB_E_BADCOMPAREOP jest zwracana, jeśli UDT jest używany jako typ kolumna wyszukiwania.

Powiązania danych i Coercions

W poniższej tabela przedstawiono powiązanie i przymus, który występuje, gdy typy danych wymienionych w SQL Server UDT.UDT kolumn są dostępne za pośrednictwem SQL Server macierzystego klienta dostawca OLE DB jako DBTYPE_UDT.Za pomocą zestawów wierszy odpowiedni schemat może pobierać metadane, dzięki czemu można zarządzać własne typy zdefiniowane jako obiekty.

Typ danych

Do serwera

UDT

Do serwera

do UDT

Z serwera

UDT

Z serwera

do UDT

DBTYPE_UDT

Obsługiwane6

Błąd1

Obsługiwane6

Błąd5

DBTYPE_BYTES

Obsługiwane6

N/A2

Obsługiwane6

N/A2

DBTYPE_WSTR

Obsługiwane3,6

N/A2

Obsługiwane4,6

N/A2

DBTYPE_BSTR

Obsługiwane3,6

N/A2

Obsługiwane4

N/A2

TYPEM DBTYPE_STR

Obsługiwane3,6

N/A2

Obsługiwane4,6

N/A2

DBTYPE_IUNKNOWN

Nieobsługiwana

N/A2

Nieobsługiwana

N/A2

DBTYPE_VARIANT (VT_UI1 | VT_ARRAY)

Obsługiwane6

N/A2

Obsługiwane4

N/A2

DBTYPE_VARIANT (VT_BSTR)

Obsługiwane3,6

N/A2

Brak

N/A2

1, Jeśli serwer innych typów niż określona z DBTYPE_UDT ICommandWithParameters::SetParameterInfo i metoda dostępu typ jest DBTYPE_UDT, wystąpi błąd podczas wykonywania instrukcja (DB_E_ERRORSOCCURRED; Stan parametru jest DBSTATUS_E_BADACCESSOR).W przeciwnym razie dane są przesyłane do serwera, ale serwer zwraca błąd wskazujący, że jest niejawna konwersja z UDT typ danych parametru.

2Poza zakres tego tematu.

3 Występuje konwersji danych z ciąg szesnastkowy dane binarne.

4 Występuje konwersji danych binarnych na format szesnastkowy ciąg danych.

5Poprawności może być utworzenie metoda dostępu czas, lub przy sprowadzaniu czas, błąd jest DB_E_ERRORSOCCURRED wiążące stan ma wartość DBBINDSTATUS_UNSUPPORTEDCONVERSION.

6BY_REF mogą być używane.

DBTYPE_NULL i DBTYPE_EMPTY mogą być powiązane parametry wejściowe, ale nie dla parametrów wyjściowych lub wyniki.Powiązany parametrów wejściowych, stan musi być zestaw DBSTATUS_S_ISNULL lub DBSTATUS_S_DEFAULT.

Można także przekonwertować DBTYPE_UDT DBTYPE_EMPTY i DBTYPE_NULL, ale DBTYPE_NULL i DBTYPE_EMPTY nie można przekonwertować na DBTYPE_UDT.Jest to zgodne z DBTYPE_BYTES.

Ostrzeżenie

Nowy interfejs jest używany do zajmowania się UDTs jako parametry, ISSCommandWithParameters, która dziedziczy z ICommandWithParameters.Aplikacje muszą używać interfejs do zestaw co najmniej SSPROP_PARAM_UDT_NAME DBPROPzestaw_SQLSERVERPARAMETER właściwość zestaw dla parametrów UDT.Jeśli nie zostanie to zrobione, ICommand::Execute zwróci DB_E_ERRORSOCCURRED.Ten interfejs oraz zestaw właściwość opisano w dalszej części tego tematu.

Jeśli typ zdefiniowany przez użytkownika jest wstawiany do kolumna, która nie jest wystarczająco duży, aby pomieścić wszystkie jego dane ICommand::Execute zwróci S_OK stan DB_E_ERRORSOCCURRED.

Konwersje danych dostarczonych przez OLE DB core services (IDataConvert) nie mają zastosowania do DBTYPE_UDT.Nie inne powiązania są obsługiwane.

OLE DB wierszy uzupełnień i zmian

SQL ServerNative Client dodaje nowe wartości lub zmiany do wielu podstawowych zestawów wierszy schematu DB OLE.

Zestaw wierszy schematu PROCEDURE_PARAMETERS

Następujące dodatki zostały wprowadzone do zestaw wierszy schematu PROCEDURE_PARAMETERS.

Nazwa kolumny

Typ

Opis

SS_UDT_CATALOGNAME

DBTYPE_WSTR

Identyfikator nazwy trzech części.

SS_UDT_SCHEMANAME

DBTYPE_WSTR

Identyfikator nazwy trzech części.

SS_UDT_NAME

DBTYPE_WSTR

Identyfikator nazwy trzech części.

SS_UDT_ASSEMBLY_TYPENAME

DBTYPE_WSTR

Nazwa kwalifikowana wirtualny plik dziennika, wpisz nazwę i konieczne wykorzystanie przez środowisko CLR identyfikator wirtualny plik dziennika.

Zestaw wierszy schematu SQL_ASSEMBLIES

SQL Server Macierzystego klienta dostawca OLE DB udostępnia nowe określonego dostawcę zestaw zestaw wierszy schematu , który opisuje zarejestrowanych UDTs.Serwer zestawu mogą być określone jako DBTYPE_WSTR, ale nie jest obecny w zestawie zestaw wierszy.Jeśli nie jest określony, domyślnie będzie zestawu zestaw wierszy bieżącego serwera.Zestaw wierszy schematu SQL_ASSEMBLIES jest zdefiniowany w poniższej tabela.

Nazwa kolumny

Typ

Opis

ASSEMBLY_CATALOG

DBTYPE_WSTR

Nazwa katalogu wirtualny plik dziennika, który zawiera tekst.

ASSEMBLY_SCHEMA

DBTYPE_WSTR

Nazwa schematu lub właściciel nazwy wirtualny plik dziennika, który zawiera tekst.Chociaż zespoły są o zakresie przez bazę danych, a nie przez schemat, nadal ma właściciela, która jest odzwierciedlana w tym miejscu.

ASSEMBLY_NAME

DBTYPE_WSTR

Nazwa wirtualny plik dziennika, który zawiera tekst.

ASSEMBLY_ID

DBTYPE_UI4

Identyfikator obiektu wirtualny plik dziennika, który zawiera tekst.

PERMISSION_SET

DBTYPE_WSTR

Wartość, która wskazuje zakres dostępu dla wirtualny plik dziennika.Wartości to "Bezpieczne", "external_access" i "NIEBEZPIECZNY".

ASSEMBLY_BINARY

DBTYPE_BYTES

Reprezentacja binarna wirtualny plik dziennika.

Zestaw wierszy schematu zależności SQL_ASSEMBLIES_

SQL ServerMacierzystego dostawcy klienta OLE DB udostępnia nowe od dostawcy zestaw zestaw wierszy schematu , który opisuje zależności wirtualny plik dziennika dla określonego serwera.ASSEMBLY_SERVER może być określony przez obiekt wywołujący jako DBTYPE_WSTR, ale nie jest obecny w zestawie zestaw wierszy.Jeśli nie jest określony, domyślnie będzie zestawu zestaw wierszy bieżącego serwera.Zestaw wierszy schematu SQL_ASSEMBLY_DEPENDENCIES jest zdefiniowany w poniższej tabela.

Nazwa kolumny

Typ

Opis

ASSEMBLY_CATALOG

DBTYPE_WSTR

Nazwa katalogu wirtualny plik dziennika, który zawiera tekst.

ASSEMBLY_SCHEMA

DBTYPE_WSTR

Nazwa schematu lub właściciel nazwy wirtualny plik dziennika, który zawiera tekst.Chociaż zespoły są o zakresie przez bazę danych, a nie przez schemat, nadal ma właściciela, która jest odzwierciedlana w tym miejscu.

ASSEMBLY_ID

DBTYPE_UI4

Identyfikator obiektu wirtualny plik dziennika.

REFERENCED_ASSEMBLY_ID

DBTYPE_UI4

Identyfikator obiektu odnośny wirtualny plik dziennika.

Zestaw wierszy schematu SQL_USER_TYPES

SQL ServerMacierzysta klienta OLE DB dostawca udostępnia nowy zestaw zestaw wierszy schematu, SQL_USER_TYPES, który opisuje, kiedy dodaje się UDTs zarejestrowanych dla określonego serwera.UDT_SERVER musi być określona jako DBTYPE_WSTR przez rozmówcę, ale nie jest obecny w zestawie zestaw wierszy.Zestaw wierszy schematu SQL_USER_TYPES jest zdefiniowany w poniższej tabela.

Nazwa kolumny

Typ

Opis

UDT_CATALOGNAME

DBTYPE_WSTR

UDT kolumn ta właściwość jest ciąg określający nazwę katalogu, w którym zdefiniowano UDT.

UDT_SCHEMANAME

DBTYPE_WSTR

Dla kolumn UDT ta właściwość jest ciąg określający nazwę schematu, w którym zdefiniowano UDT.

UDT_NAME

DBTYPE_WSTR

Nazwa wirtualny plik dziennika zawierającego klasę UDT.

UDT_ASSEMBLY_TYPENAME

DBTYPE_WSTR

Wpisz pełną nazwę (AQN) zawiera nazwę typu prefiksem według nazw, jeśli ma to zastosowanie.

Zestaw wierszy kolumn schematu

Dodatki do kolumny zestaw zestaw wierszy schematu zawierać następujące kolumny.

Nazwa kolumny

Typ

Opis

SS_UDT_CATALOGNAME

DBTYPE_WSTR

UDT kolumn ta właściwość jest ciąg określający nazwę katalogu, w którym zdefiniowano UDT.

SS_UDT_SCHEMANAME

DBTYPE_WSTR

Dla kolumn UDT ta właściwość jest ciąg określający nazwę schematu, w którym zdefiniowano UDT.

SS_UDT_NAME

DBTYPE_WSTR

Nazwa UDT

SS_UDT_ASSEMBLY_TYPENAME

DBTYPE_WSTR

Wpisz pełną nazwę (AQN) zawiera nazwę typu prefiksem według nazw, jeśli ma to zastosowanie.

OLE DB właściwości ustaw uzupełnień i zmian

SQL ServerNative Client dodaje nowe wartości lub zmian wiele podstawowych właściwość OLE DB zestawów.

Ustaw właściwość DBPROPSET_SQLSERVERPARAMETER

Do obsługi UDTs poprzez OLE DB, SQL Server Native Client implementuje nowego zestaw właściwość DBPROPSET_SQLSERVERPARAMETER, który zawiera następujące wartości.

Nazwa

Typ

Opis

SSPROP_PARAM_UDT_CATALOGNAME

DBTYPE_WSTR

Identyfikator nazwy trzech części.

Dla parametrów UDT tej właściwości jest ciągiem, który określa nazwę katalogu gdzie typ zdefiniowany przez użytkownika jest zdefiniowany.

SSPROP_PARAM_UDT_SCHEMANAME

DBTYPE_WSTR

Identyfikator nazwy trzech części.

Dla parametrów UDT ta właściwość jest ciąg określający nazwę schematu gdzie typ zdefiniowany przez użytkownika jest zdefiniowany.

SSPROP_PARAM_UDT_NAME

DBTYPE_WSTR

Identyfikator nazwy trzech części.

Dla kolumn UDT ta właściwość jest ciąg określający nazwę jednej części typ zdefiniowany przez użytkownika.

SSPROP_PARAM_UDT_NAME jest obowiązkowe.SSPROP_PARAM_UDT_CATALOGNAME i SSPROP_PARAM_UDT_SCHEMANAME są opcjonalne.Jeśli właściwości są niepoprawnie określone zostaną zwrócone DB_E_ERRORSINCOMMAND.Jeśli nie określono SSPROP_PARAM_UDT_CATALOGNAME i SSPROP_PARAM_UDT_SCHEMANAME, UDT musi zostać następnie zdefiniowane w tej samej bazy danych i schematu jako tabela.Jeżeli definicja UDT nie jest tego samego schematu jako tabela (w tej samej bazy danych), SSPROP_PARAM_UDT_SCHEMANAME musi być określona.Jeśli definicja UDT jest w innej bazie danych następnie SSPROP_PARAM_UDT_CATALOGNAME i SSPROP_PARAM_UDT_SCHEMANAME musi być określona.

Ustaw właściwość DBPROPSET_SQLSERVERCOLUMN

Obsługiwać tworzenie tabel w ITableDefinition interfejs SQL Server Native Client dodaje następujące trzy nowe kolumny do zestaw właściwość DBPROPSET_SQLSERVERCOLUMN.

Nazwa

Opis

Typ

Opis

SSPROP_COL_UDT_CATALOGNAME

UDT_CATALOGNAME

VT_BSTR

Dla kolumny typu DBTYPE_UDT ta właściwość jest ciąg określający nazwę katalogu, gdzie zdefiniowana UDT.

SSPROP_COL_UDT_SCHEMANAME

UDT_SCHEMANAME

VT_BSTR

Dla kolumny typu DBTYPE_UDT ta właściwość jest ciąg określający nazwę schematu, w którym zdefiniowano UDT.

SSPROP_COL_UDT_NAME

UDT_NAME

VT_BSTR

Dla kolumny typu DBTYPE_UDT ta właściwość jest ciąg określający nazwę jednej części UDT.Inne kolumna typów, właściwość ta zwraca pusty ciąg.

Ostrzeżenie

UDTs nie są wyświetlane w zestawie zestaw wierszy schematu PROVIDER_TYPES.Wszystkie kolumny mają odczytu i zapisu.

Przy użyciu odpowiedniego wpisu kolumna Opis ADO będzie odnosić się do tych właściwości.

SSPROP_COL_UDTNAME jest obowiązkowe.SSPROP_COL_UDT_CATALOGNAME i SSPROP_COL_UDT_SCHEMANAME są opcjonalne.Jeśli właściwości są określone, DB_E_ERRORSINCOMMAND zostaną zwrócone.

Jeśli określono SSPROP_COL_UDT_CATALOGNAME ani SSPROP_COL_UDT_SCHEMANAME, UDT należy zdefiniować w tej samej bazy danych i schematu jako tabela.

Jeżeli definicja UDT nie jest tego samego schematu jako tabela (w tej samej bazy danych), SSPROP_COL_UDT_SCHEMANAME musi być określony.

Jeśli definicja UDT znajduje się w innej bazie danych, SSPROP_COL_UDT_CATALOGNAME i SSPROP_COL_UDT_SCHEMANAME musi być określona.

OLE DB interfejsu uzupełnień i zmian

SQL ServerNative Client dodaje nowe wartości lub zmian wiele podstawowe interfejsy OLE DB.

Interfejs ISSCommandWithParameters

Do obsługi UDTs poprzez OLE DB, SQL Server liczbę zmian, w tym dodanie implementuje Native Client ISSCommandWithParameters interfejs.Ten interfejs dziedziczy z interfejsem OLE DB core ICommandWithParameters.Oprócz trzy metody dziedziczone z ICommandWithParameters; GetParameterInfo, MapParameterNames, i metoda SetParameterInfo; ISSCommandWithParameters zawiera GetParameterProperties i SetParameterProperties metod, które są używane do obsługi typów danych określonego serwera.

Ostrzeżenie

ISSCommandWithParameters interfejs również korzysta z SSPARAMPROPS nowe struktury.

Interfejs IColumnsRowset

Oprócz ISSCommandWithParameters interfejs, SQL Server Native Client dodaje również nowe wartości do zestaw wierszy zwracanych od telefoniczną IColumnsRowset::GetColumnRowset tym następujące metoda.

Nazwa kolumny

Typ

Opis

DBCOLUMN_SS_UDT_CATALOGNAME

DBTYPE_WSTR

Identyfikator nazwy katalogu UDT.

DBCOLUMN_SS_UDT_SCHEMANAME

DBTYPE_WSTR

Identyfikator nazwy schematu UDT.

DBCOLUMN_SS_UDT_NAME

DBTYPE_WSTR

Identyfikator nazwy UDT.

DBCOLUMN_SS_ASSEMBLY_TYPENAME

DBTYPE_WSTR

Nazwa kwalifikowana wirtualny plik dziennika, wpisz nazwę i konieczne wykorzystanie przez środowisko CLR identyfikator wirtualny plik dziennika.

kolumna UDT serwera można odróżnić od innych typów binarnego po DBCOLUMN_TYPE zestaw do DBTYPE_UDT, patrząc na dodatkowe metadane UDT określone powyżej.W przypadku częściowo kompletne dane typu serwera jest UDT.Typy serwerów bez UDT kolumny te są zawsze zwracane jako NULL.

Sterownik ODBC macierzystym klienta SQL Server

Liczba zmian dokonanych w SQL Server sterownik ODBC macierzystym klienta do obsługi UDTs. SQL Server Mapy sterownika ODBC macierzystym klienta SQL Server UDT danych SQL specyficzne dla sterownika SQL_SS_UDT wpisz identyfikator.Kolumny UDT są udostępnione jako SQL_SS_UDT.Mapując kolumna UDT jawnie innego typu w instrukcja języka SQL za pomocą ToString lub ToXMLString metody UDT, lub poprzez WYTOPU i konwertowanie funkcja typu kolumna zestaw wyników odzwierciedla rzeczywisty typ kolumna został przekonwertowany na

SQLColAttribute, SQLDescribeParam, SQLGetDescField

Dodano cztery nowe pola deskryptora specyficzne dla sterownika dostarczenie dodatkowych informacji w obu, kolumna UDT zestaw wyników lub parametr UDT procedura składowana/ sparametryzowana kwerendy pobierane za pośrednictwem SQLColAttribute, SQLDescribeParam, i SQLGetDescField funkcji.

Cztery nowe pola deskryptora, które zostały dodane są SQL_CA_SS_UDT_CATALOG_NAME, SQL_CA_SS_UDT_SCHEMA_NAME, SQL_CA_SS_UDT_TYPE_NAME i SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME.

SQLColumns SQLProcedureColumns

Ponadto trzy nowe kolumna określonego sterownika są dodawane do zestaw wyników zwrócił SQLColumns i SQLProcedureColumns funkcje zapewniające dodatkowe informacje na temat albo UDT zestaw wyników kolumna lub parametrów UDT.Te trzy kolumny są SS_UDT_CATALOG_NAME, SS_UDT_SCHEMA_NAME i SS_UDT_ASSEMBLY_TYPE_NAME.

Konwersje obsługiwanych

Podczas konwersji z SQL typów danych C, SQL_C_WCHAR, SQL_C_BINARY i SQL_C_CHAR można wszystkie przekonwertować na SQL_SS_UDT.Należy jednak zauważyć, że dane binarne jest konwertowana na ciąg szesnastkowy podczas konwersji typów danych SQL_C_CHAR SQL i SQL_C_WCHAR.

Podczas konwersji z c typy danych języka SQL, SQL_C_WCHAR, SQL_C_BINARY i SQL_C_CHAR można wszystkie przekonwertować na SQL_SS_UDT.Jednak należy pamiętać, że dane binarne jest konwertowana na ciąg szesnastkowy podczas konwersji typów danych SQL_C_CHAR SQL i SQL_C_WCHAR.