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.
Zobacz także