Udostępnij za pośrednictwem


Za pomocą Typy definiowane przez użytkownika

SQL Server 2005 wprowadzone przez użytkownika typów (UDTs).UDTs rozszerzenie systemu typ SQL umożliwia przechowywanie obiektów i struktur danych niestandardowych w SQL Server Baza danych. UDTs może zawierać wiele typów danych i może mieć zachowania rozróżnianie je od tradycyjnych alias typy danych, które składają się z pojedynczego SQL Server Systemowy typ danych. UDTs są definiowane przy użyciu dowolnej z języków obsługiwanych przez .NET wykonywalnych języka wspólnego (CLR) generujące kodu mogą zostać sprawdzone.Dotyczy to również Microsoft Visual C#® i Visual Basic® .NET.Dane jest ujawniona jako pola i właściwości .NET klasy lub struktury i zachowania są określone za pomocą metod klasy lub struktury.

UDT mogą być używane jako jako zmienna w definicji kolumna tabela, Transact-SQL partia, lub jako argument Transact-SQL Funkcja lub procedura przechowywana. Aby uzyskać więcej informacji na temat UDTs zobacz Working with CLR User-defined Types.

Dostawca OLE DB programu SQL Server Native Client

The SQL Server Native klient OLE DB dostawca supports UDTs as binary types with metadane information, which allows you to manage UDTs as objects. Kolumny UDT są dostępne jako DBTYPE_UDT i ich metadane są dostępne za pośrednictwem interfejs OLE DB podstawowe IColumnRowseta nowaISSCommandWithParameters interfejs.

Uwaga

The IRowsetFind::FindNextRow metoda does not work with the UDT data type.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 wiązanie i przymus, który występuje, gdy przy użyciu danych wyświetlonych na liście typów z SQL Server UDT. Kolumny UDT są dostępne za pośrednictwem SQL Server Macierzystego dostawca klient 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

Z serwerem

UDT

Z serwerem

inne niż UDT

Z serwera

UDT

Z serwera

inne niż UDT

DBTYPE_UDT

Obsługiwane6

Błąd1

Obsługiwane6

Błąd5

DBTYPE_BYTES

Obsługiwane6

NIE DOTYCZY2

Obsługiwane6

NIE DOTYCZY2

DBTYPE_WSTR

Obsługiwane3,6

NIE DOTYCZY2

Obsługiwane4,6

NIE DOTYCZY2

DBTYPE_BSTR

Obsługiwane3,6

NIE DOTYCZY2

Obsługiwane4

NIE DOTYCZY2

DBTYPE_STR

Obsługiwane3,6

NIE DOTYCZY2

Obsługiwane4,6

NIE DOTYCZY2

DBTYPE_IUNKNOWN

Nie jest obsługiwany

NIE DOTYCZY2

Nie jest obsługiwany

NIE DOTYCZY2

DBTYPE_VARIANT (VT_UI1 | VT_ARRAY)

Obsługiwane6

NIE DOTYCZY2

Obsługiwane4

NIE DOTYCZY2

DBTYPE_VARIANT (VT_BSTR)

Obsługiwane3,6

NIE DOTYCZY2

NIE DOTYCZY

NIE DOTYCZY2

1Jeśli na serwerze innym niż DBTYPE_UDT jest określany za pomocą ICommandWithParameters::SetParameterInfo oraz typ dostępu jest DBTYPE_UDT, wystąpi błąd, gdy jest wykonywane w instrukcja (DB_E_ERRORSOCCURRED; DBSTATUS_E_BADACCESSOR jest w stanie parametru).W przeciwnym razie dane są przesyłane do serwera, ale serwer zwraca błąd wskazujący, że istnieje niejawna konwersja z UDT na typ danych parametru.

2Poza zakres tego tematu.

3 Konwersja danych szesnastkowych ciąg na dane binarne występuje.

4 Konwersja danych binarnych dane szesnastkowe ciąg występuje.

5Sprawdzanie poprawności może występować w metoda dostępu godzina utworzenia lub w momencie pobierania, znajduje się błąd DB_E_ERRORSOCCURRED wiązania stan zestaw do DBBINDSTATUS_UNSUPPORTEDCONVERSION.

6BY_REF mogą być używane.

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

DBTYPE_UDT można skonwertować także DBTYPE_EMPTY i DBTYPE_NULL, ale DBTYPE_NULL i DBTYPE_EMPTY nie mogą być konwertowane na DBTYPE_UDT.Jest to zgodne z DBTYPE_BYTES.

Uwaga

Nowy interfejs jest używany do zajmowania UDTs jako parametry, ISSCommandWithParameters, która dziedziczy ICommandWithParameters.Aplikacje muszą używać tego interfejs ustawić co najmniej SSPROP_PARAM_UDT_NAME właściwość DBPROPSET_SQLSERVERPARAMETER dla parametrów UDT.Jeśli nie można to zrobić, ICommand::wykonać zwróci DB_E_ERRORSOCCURRED.Ten zestaw interfejs i 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::wykonać zwróci S_OK ze stanem DB_E_ERRORSOCCURRED.

Podczas konwersji danych dostarczanych przez (usług) podstawowych baz danych OLEIDataConvert) nie są stosowane do DBTYPE_UDT.Inne powiązania nie są obsługiwane.

Dodawanie zestawu zestaw wierszy DB OLE i zmian

SQL Server Dodaje nowe wartości lub zmienia się do wielu podstawowych OLE macierzystym klient DB schematu zestawów wierszy.

PROCEDURE_PARAMETERS zestaw wierszy schematu

Wprowadzono następujące dodatki PROCEDURE_PARAMETERS zestaw wierszy schematu.

Nazwa kolumna

Typ

Description

SS_UDT_CATALOGNAME

DBTYPE_WSTR

Identyfikator nazwę trzech części.

SS_UDT_SCHEMANAME

DBTYPE_WSTR

Identyfikator nazwę trzech części.

SS_UDT_NAME

DBTYPE_WSTR

Identyfikator nazwę trzech części.

SS_UDT_ASSEMBLY_TYPENAME

DBTYPE_WSTR

Kwalifikowanej nazwy wirtualny plik dziennika, który zawiera nazwę typu i wszystkie niezbędne odwoływać się do środowiska CLR identyfikator wirtualny plik dziennika.

SQL_ASSEMBLIES zestaw wierszy schematu

The SQL Server Native klient OLE DB dostawca exposes a new dostawca specific zestaw wierszy schematu that describes the registered UDTs. Serwer MONTAŻOWYCH mogą być określone jako DBTYPE_WSTR, ale nie jest obecny w zestawie wirtualny plik dziennika wierszy.Jeśli nie zostanie określony, ten zestaw wierszy zostaną ustawione wartości domyślne do bieżącego serwera.Zestaw wierszy schematu SQL_ASSEMBLIES jest zdefiniowany w tabela poniżej.

Nazwa kolumna

Typ

Description

ASSEMBLY_CATALOG

DBTYPE_WSTR

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

ASSEMBLY_SCHEMA

DBTYPE_WSTR

Nazwa schematu lub nazwa właściciela, zawierający typ wirtualny plik dziennika.Mimo że zestawy są objęty zakresem, 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 typ.

ASSEMBLY_ID

DBTYPE_UI4

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

PERMISSION_SET

DBTYPE_WSTR

Wartość, która wskazuje zakres dostępu dla wirtualny plik dziennika.Wartości to "" bezpieczne","EXTERNAL_ACCESS"i"UNSAFE".

ASSEMBLY_BINARY

DBTYPE_BYTES

Reprezentacja binarna wirtualny plik dziennika.

ZALEŻNOŚCI SQL_ASSEMBLIES_ zestaw wierszy schematu

SQL Server Macierzystego dostawca klient OLE DB udostępnia nowy wirtualny plik dziennika wierszy schematu specyficznym dla dostawca, opisujący 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 zostanie określony, ten zestaw wierszy zostaną ustawione wartości domyślne do bieżącego serwera.Zestaw wierszy schematu SQL_ASSEMBLY_DEPENDENCIES jest zdefiniowany w tabela poniżej.

Nazwa kolumna

Typ

Description

ASSEMBLY_CATALOG

DBTYPE_WSTR

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

ASSEMBLY_SCHEMA

DBTYPE_WSTR

Nazwa schematu lub nazwa właściciela, zawierający typ wirtualny plik dziennika.Mimo że zestawy są objęty zakresem, 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 do wirtualny plik dziennika.

REFERENCED_ASSEMBLY_ID

DBTYPE_UI4

Identyfikator obiektu, do którego istnieje odwołanie wirtualny plik dziennika.

Zestaw wierszy SQL_USER_TYPES schematu

SQL Server Macierzystego dostawca klient OLE DB udostępnia nowy zestaw zestaw wierszy schematu SQL_USER_TYPES, który opisuje, kiedy dodaje się zarejestrowanych UDTs dla określonego serwera.UDT_SERVER musi być określona jako DBTYPE_WSTR przez obiekt wywołujący, ale nie jest obecny w zestawie zestaw wierszy.Zestaw wierszy schematu SQL_USER_TYPES jest zdefiniowany w tabela poniżej.

Nazwa kolumna

Typ

Description

UDT_CATALOGNAME

DBTYPE_WSTR

W przypadku kolumn UDT ta właściwość jest ciąg określający nazwę katalogu zdefiniowano UDT.

UDT_SCHEMANAME

DBTYPE_WSTR

W przypadku kolumn UDT ta właściwość jest ciąg określający nazwę schematu, gdzie zdefiniowana jest 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 zastosowanie.

W kolumnach zestaw wierszy schematu

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

Nazwa kolumna

Typ

Description

SS_UDT_CATALOGNAME

DBTYPE_WSTR

W przypadku kolumn UDT ta właściwość jest ciąg określający nazwę katalogu zdefiniowano UDT.

SS_UDT_SCHEMANAME

DBTYPE_WSTR

W przypadku kolumn UDT ta właściwość jest ciąg określający nazwę schematu, gdzie zdefiniowana jest 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 zastosowanie.

Ustawianie właściwość DB OLE, dodatki i zmiany

SQL Server Dodaje nowe wartości lub zmienia się do wielu podstawowych baz danych OLE właściwość zestawów macierzystym klient.

Do zestaw właściwość DBPROPSET_SQLSERVERPARAMETER

W celu obsługi UDTs za pomocą OLE DB, SQL Server Klient macierzystym implementuje nowego zestaw właściwość DBPROPSET_SQLSERVERPARAMETER, która zawiera następujące wartości.

Imię i nazwisko

Typ

Description

SSPROP_PARAM_UDT_CATALOGNAME

DBTYPE_WSTR

Identyfikator nazwę trzech części.

Ta właściwość jest dla parametrów UDT a ciąg, określa nazwę katalogu, gdzie jest zdefiniowany typ zdefiniowany przez użytkownika.

SSPROP_PARAM_UDT_SCHEMANAME

DBTYPE_WSTR

Identyfikator nazwę trzech części.

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

SSPROP_PARAM_UDT_NAME

DBTYPE_WSTR

Identyfikator nazwę trzech części.

W wypadku 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 wszystkie właściwości są nieprawidłowo określone DB_E_ERRORSINCOMMAND zostaną zwrócone.Jeżeli nie podano SSPROP_PARAM_UDT_CATALOGNAME i SSPROP_PARAM_UDT_SCHEMANAME, następnie UDT musi być zdefiniowany w tej samej bazy danych i schematu jako tabela.Jeśli definicja UDT nie znajduje się w tej samej schematu jako tabela (ale znajduje się 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.

Do zestaw właściwość DBPROPSET_SQLSERVERCOLUMN

Aby obsługiwać tworzenie tabel w ITableDefinition interfejsSQL Server Klient macierzystym dodaje trzy nowe kolumny DBPROPSET_SQLSERVERCOLUMN zestaw właściwość.

Imię i nazwisko

Description

Typ

Description

SSPROP_COL_UDT_CATALOGNAME

UDT_CATALOGNAME

VT_BSTR

W przypadku kolumn typu DBTYPE_UDT ta właściwość jest ciąg określający nazwę katalogu zdefiniowano UDT.

SSPROP_COL_UDT_SCHEMANAME

UDT_SCHEMANAME

VT_BSTR

W przypadku kolumn typu DBTYPE_UDT ta właściwość jest ciąg określający nazwę schematu, gdzie zdefiniowana jest UDT.

SSPROP_COL_UDT_NAME

UDT_NAME

VT_BSTR

W przypadku kolumn typu DBTYPE_UDT ta właściwość jest ciąg znaków określający nazwę jednej części UDT.W przypadku innych typów kolumn właściwość ta zwraca pusty ciąg.

Uwaga

UDTs nie pojawiają się w zestawie zestaw wierszy PROVIDER_TYPES schematu.Wszystkie kolumny mają odczytu i zapisu dostępu.

Za pomocą 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 jedna z właściwości są określone DB_E_ERRORSINCOMMAND zostaną zwrócone.

Jeżeli określono SSPROP_COL_UDT_CATALOGNAME ani SSPROP_COL_UDT_SCHEMANAME the UDT musi być zdefiniowany w tej samej bazy danych i schematu jako tabela.

Jeśli definicja UDT nie znajduje się w tej samej schematu jako tabela (ale znajduje się w tej samej bazy danych), SSPROP_COL_UDT_SCHEMANAME musi być określona.

Jeśli definicja UDT znajduje się w innej bazie danych, należy określić zarówno SSPROP_COL_UDT_CATALOGNAME i SSPROP_COL_UDT_SCHEMANAME.

Dodawanie interfejs DB OLE i zmian

SQL Server Dodaje nowe wartości lub zmienia się do wielu podstawowych interfejsy OLE DB macierzystym klient.

Interfejs ISSCommandWithParameters

Aby obsługiwać UDTs za pomocą OLE DB, SQL Server Klient macierzystym implementuje wiele zmian, w tym dodatku ISSCommandWithParameters interfejs.Ten nowy interfejs dziedziczy z interfejsem OLE DB podstawowe ICommandWithParameters.Oprócz trzech metod dziedziczone ICommandWithParameters; GetParameterInfo, MapParameterNames, and SetParameterInfo; ISSCommandWithParameters przewidujeGetParameterProperties and SetParameterProperties metody, które są używane do obsługi typów danych określonego serwera.

Uwaga

The ISSCommandWithParameters interfejs also makes use of the new SSPARAMPROPS structure.

Interfejs IColumnsRowset

Oprócz ISSCommandWithParameters interfejsSQL Server Macierzysty klient dodaje również nowe wartości do zestawu zestaw wierszy zwrócił telefonicznej IColumnsRowset::GetColumnRowsetw tym następujące metoda .

Nazwa kolumna

Typ

Description

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

Kwalifikowanej nazwy wirtualny plik dziennika, który zawiera nazwę typu i wszystkie niezbędne odwoływać się do środowiska CLR identyfikator wirtualny plik dziennika.

kolumna UDT serwera może odróżnienia od innych typów binarne, jeżeli ustawiono DBCOLUMN_TYPE DBTYPE_UDT patrząc na dodatkowe metadane UDT wymienione powyżej.Jeśli dane zostało częściowo wykonane, typ serwera jest UDT.UDT innych typów serwerów kolumny te są zawsze zwracane jako wartość NULL.

Program SQL Server macierzysty sterownik ODBC klient

Wprowadzono wiele zmian w SQL Server Macierzysty sterownik ODBC klient do obsługi UDTs. The SQL Server Native klient ODBC driver maps the SQL Server UDT to SQL_SS_UDT driver-specific SQL data type identifier. Kolumny UDT są udostępnione jako SQL_SS_UDT.Jeśli należy mapować kolumn UDT jawnie innego typu w instrukcja języka SQL przy użyciu ToString or ToXMLString metody UDT lub za pośrednictwem OBSADA/KONWERSJI Funkcja typu kolumna zestaw wyników odzwierciedla rzeczywiste typ kolumna zostały przekonwertowane na

SQLGetDescField SQLColAttribute SQLDescribeParam,

Dodano cztery nowe pola deskryptora specyficzne dla sterownika dostarczenie dodatkowych informacji w obu, kolumna UDT zestaw wyników lub parametrów UDT przechowywanej procedury/parametrów kwerendy mają być pobrane za pośrednictwem SQLColAttribute, SQLDescribeParam, and SQLGetDescField funkcje.

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 wyników zestaw zwrócił SQLColumns and SQLProcedureColumns funkcji można znaleźć dodatkowe informacje na temat albo UDT spowodować zestaw kolumna lub parametrów UDT.Te trzy nowe kolumny są SS_UDT_CATALOG_NAME SS_UDT_SCHEMA_NAME i SS_UDT_ASSEMBLY_TYPE_NAME.

Obsługiwane Conversions

Podczas konwersji z programu 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 konwertowany na ciąg szesnastkowy podczas konwersji z typu danych SQL_C_WCHAR i SQL_C_CHAR SQL.

Podczas konwersji z C typy danych SQL, SQL_C_WCHAR SQL_C_BINARY i SQL_C_CHAR można wszystkie przekonwertować na SQL_SS_UDT.Należy jednak pamiętać, dane binarne jest konwertowany ciąg szesnastkowy podczas konwersji z typu danych SQL_C_WCHAR i SQL_C_CHAR SQL.