Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy do:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
System Platform Analitycznych (PDW)
Baza danych SQL w Microsoft Fabric
SQL Server 2005 (9.x) wprowadził typy zdefiniowane przez użytkownika (UDT). UDT rozszerzają system typu SQL, pozwalając na przechowywanie obiektów i niestandardowych struktur danych w bazie SQL Server. Typy danych zdefiniowane przez użytkownika mogą zawierać wiele typów danych i mogą posiadać własne zachowania, różniąc się od tradycyjnych typów danych aliasu składających się z jednego typu danych systemowych systemu SQL Server. UDT są definiowane za pomocą dowolnego z języków obsługiwanych przez .NET Common Language Runtime (CLR), które generują weryfikowalny kod. Obejmuje to C# i Visual Basic .NET. Dane są udostępniane jako pola i właściwości klasy lub struktury .NET, a zachowania są definiowane metodami klasy lub struktury.
UDT może być używany jako kolumnowa definicja tabeli, jako zmienna w Transact-SQL partii lub jako argument funkcji Transact-SQL lub procedury przechowywanej.
Sterownik OLE DB dla programu SQL Server
Sterownik OLE DB dla SQL Server obsługuje UDT jako typy binarne z informacjami o metadanych, co pozwala zarządzać UDT jako obiektami. Kolumny UDT są udostępniane jako DBTYPE_UDT, a ich metadane udostępniane przez podstawowy interfejs OLE DB IColumnRowset oraz nowy interfejs ISSCommandWithParameters .
Uwaga / Notatka
Metoda IRowsetFind::FindNextRow nie działa z typem danych UDT. DB_E_BADCOMPAREOP zwracany, jeśli UDT jest używany jako typ kolumny wyszukiwania.
Wiązania danych i przymusy
Poniższa tabela opisuje wiązanie i przymus, które występują przy użyciu wymienionych typów danych z SQL Server UDT. Kolumny UDT są udostępniane przez sterownik OLE DB dla SQL Server jako DBTYPE_UDT. Możesz pobierać metadane przez odpowiednie zestawy wierszy schematu, dzięki czemu możesz zarządzać własnymi zdefiniowanymi typami jako obiektami.
| Typ danych | Do serwera UDT |
Do serwera nie-UDT |
Z serwera UDT |
Z serwera nie-UDT |
|---|---|---|---|---|
| DBTYPE_UDT | Wspierało6 | Błąd1 | Wspierało6 | Błąd5 |
| DBTYPE_BYTES | Wspierało6 | N/D2 | Wspierało6 | N/D2 |
| DBTYPE_WSTR | Wspierano3,6 | N/D2 | Wspierali4,6 | N/D2 |
| DBTYPE_BSTR | Wspierano3,6 | N/D2 | Wspierani4 | N/D2 |
| DBTYPE_STR | Wspierano3,6 | N/D2 | Wspierali4,6 | N/D2 |
| DBTYPE_IUNKNOWN | Niewspierane | N/D2 | Niewspierane | N/D2 |
| DBTYPE_VARIANT (VT_UI1 | VT_ARRAY) | Wspierało6 | N/D2 | Wspierani4 | N/D2 |
| DBTYPE_VARIANT (VT_BSTR) | Wspierano3,6 | N/D2 | N/A | N/D2 |
1Jeśli typ serwera inny niż DBTYPE_UDT jest określony za pomocą ICommandWithParameters::SetParameterInfo, a typ accessora to DBTYPE_UDT, pojawia się błąd podczas wykonania instrukcji (DB_E_ERRORSOCCURRED status parametru to DBSTATUS_E_BADACCESSOR). W przeciwnym razie dane są wysyłane do serwera, ale serwer zwraca błąd wskazujący, że nie ma ukrytej konwersji z UDT na typ danych parametru.
cyfra arabskaWykraczające poza zakres tego artykułu.
3 Następuje konwersja danych z łańcucha heksagonalnego na dane binarne.
4 Następuje konwersja danych z danych binarnych na ciąg heksagonalny.
5Walidacja może nastąpić w momencie tworzenia accessora lub podczas pobierania, gdy błąd jest DB_E_ERRORSOCCURRED, status powiązania ustawiony na DBBINDSTATUS_UNSUPPORTEDCONVERSION.
6BY_REF można wykorzystać.
DBTYPE_NULL i DBTYPE_EMPTY mogą być ograniczone dla parametrów wejściowych, ale nie dla parametrów wyjściowych czy wyników. Gdy jest ograniczona dla parametrów wejściowych, status musi być ustawiony na DBSTATUS_S_ISNULL lub DBSTATUS_S_DEFAULT.
DBTYPE_UDT można także przekształcić na DBTYPE_EMPTY i DBTYPE_NULL, ale DBTYPE_NULL i DBTYPE_EMPTY nie mogą być przekształcone na DBTYPE_UDT. To jest zgodne z DBTYPE_BYTES.
Uwaga / Notatka
Do obsługi UDT jako parametrów używany jest nowy interfejs, ISSCommandWithParameters, który dziedziczy od ICommandWithParameters. Aplikacje muszą korzystać z tego interfejsu, aby ustawić co najmniej SSPROP_PARAM_UDT_NAME DBPROPSET_SQLSERVERPARAMETER zestawu właściwości dla parametrów UDT. Jeśli tego nie zrobię, ICommand::Execute zwróci DB_E_ERRORSOCCURRED. Ten interfejs i zestaw właściwości są opisane później w tym artykule.
Jeśli użytkownik wstawia typ zdefiniowany przez użytkownika do kolumny, która nie jest wystarczająco duża, aby pomieścić wszystkie dane, ICommand::Execute zwróci S_OK ze statusem DB_E_ERRORSOCCURRED.
Konwersje danych dostarczane przez usługi rdzeniowe OLE DB (IDataConvert) nie mają zastosowania do DBTYPE_UDT. Nie są obsługiwane żadne inne wiązania.
Dodatki i zmiany w zestawie wierszy w OLE DB
Sterownik OLE DB dla SQL Server dodaje nowe wartości lub zmiany do wielu podstawowych zestawów schematów OLE DB.
Zestaw wierszy PROCEDURE_PARAMETERS schematu
Do zestawu wierszy schematu PROCEDURE_PARAMETERS wprowadzono następujące dodatki.
| Nazwa kolumny | Typ | Description |
|---|---|---|
| SS_UDT_CATALOGNAME | DBTYPE_WSTR | Trzyczęściowy identyfikator imienia. |
| SS_UDT_SCHEMANAME | DBTYPE_WSTR | Trzyczęściowy identyfikator imienia. |
| SS_UDT_NAME | DBTYPE_WSTR | Trzyczęściowy identyfikator imienia. |
| SS_UDT_ASSEMBLY_TYPENAME | DBTYPE_WSTR | Nazwa Assembly Qualified Name, która zawiera nazwę typu oraz wszystkie niezbędne identyfikacje zespołu do odwołania się przez CLR. |
Zestaw wierszy SQL_ASSEMBLIES schematu
Sterownik OLE DB dla SQL Server udostępnia nowy, specyficzny dla dostawcy zestaw wierszy schematu, który opisuje zarejestrowane UDT. Serwer ASSEMBLY może być określony jako DBTYPE_WSTR, ale nie jest obecny w zestawie wierszy. Jeśli nie jest to określone, zestaw wierszy domyślnie będzie wyświetlany na bieżącym serwerze. Zestaw wierszy SQL_ASSEMBLIES schematu jest zdefiniowany w następującej tabeli:
| Nazwa kolumny | Typ | Description |
|---|---|---|
| ASSEMBLY_CATALOG | DBTYPE_WSTR | Katalogowa nazwa zespołu, który zawiera ten typ. |
| ASSEMBLY_SCHEMA | DBTYPE_WSTR | Nazwa schematu, czyli właściciela, asembla, który zawiera ten typ. Chociaż zestawy są określane według bazy danych, a nie schematu, nadal mają właściciela, co jest tutaj odzwierciedlone. |
| ASSEMBLY_NAME | DBTYPE_WSTR | Nazwa zespołu, który zawiera ten typ. |
| ASSEMBLY_ID | DBTYPE_UI4 | ID obiektu asemblera, który zawiera ten typ. |
| PERMISSION_SET | DBTYPE_WSTR | Wartość wskazująca zakres dostępu dla asembleru. Wartości obejmują "BEZPIECZNE", "EXTERNAL_ACCESS" i "NIEBEZPIECZNE". |
| ASSEMBLY_BINARY | DBTYPE_BYTES | Binarna reprezentacja zgromadzenia. |
Zestaw wierszy schematu SQL_ASSEMBLIES_ DEPENDENCIES
Sterownik OLE DB dla SQL Server udostępnia nowy, specyficzny dla dostawcy zestaw wierszy schematu, który opisuje zależności asemblera dla określonego serwera. ASSEMBLY_SERVER może być określony przez wywołującego jako DBTYPE_WSTR, ale nie występuje w zestawie wierszy. Jeśli nie jest to określone, zestaw wierszy domyślnie będzie wyświetlany na bieżącym serwerze. Zestaw wierszy SQL_ASSEMBLY_DEPENDENCIES schematu jest zdefiniowany w następującej tabeli:
| Nazwa kolumny | Typ | Description |
|---|---|---|
| ASSEMBLY_CATALOG | DBTYPE_WSTR | Katalogowa nazwa zespołu, który zawiera ten typ. |
| ASSEMBLY_SCHEMA | DBTYPE_WSTR | Nazwa schematu, czyli właściciela, asembla, który zawiera ten typ. Chociaż zespoły są określane przez bazę danych, a nie schemat, nadal mają właściciela, co jest tutaj odzwierciedlone. |
| ASSEMBLY_ID | DBTYPE_UI4 | ID obiektu asamblera. |
| REFERENCED_ASSEMBLY_ID | DBTYPE_UI4 | Identyfikator obiektu odwołanego zespołu. |
Zestaw wierszy SQL_USER_TYPES schematu
Sterownik OLE DB dla SQL Server udostępnia nowy zestaw wierszy schematu, SQL_USER_TYPES, który opisuje, kiedy dodane są zarejestrowane UDT dla określonego serwera. UDT_SERVER musi być określony jako DBTYPE_WSTR przez wywołującego, ale nie jest obecny w zestawie wierszy. Zestaw wierszy SQL_USER_TYPES schematu jest zdefiniowany w poniższej tabeli.
| Nazwa kolumny | Typ | Description |
|---|---|---|
| UDT_CATALOGNAME | DBTYPE_WSTR | Dla kolumn UDT ta właściwość jest ciągiem określającym nazwę katalogu, w którym UDT jest zdefiniowany. |
| UDT_SCHEMANAME | DBTYPE_WSTR | Dla kolumn UDT ta właściwość jest ciągiem określającym nazwę schematu, w którym UDT jest zdefiniowany. |
| UDT_NAME | DBTYPE_WSTR | Nazwa zespołu zawierającego klasę UDT. |
| UDT_ASSEMBLY_TYPENAME | DBTYPE_WSTR | Pełna nazwa typu (AQN) zawiera nazwę typu poprzedzoną przestrzenią nazw, jeśli dotyczy. |
Zestaw wierszy COLUMNS Schema
Dodatki do zestawu wierszy schematu COLUMNS obejmują następujące kolumny:
| Nazwa kolumny | Typ | Description |
|---|---|---|
| SS_UDT_CATALOGNAME | DBTYPE_WSTR | Dla kolumn UDT ta właściwość jest ciągiem określającym nazwę katalogu, w którym UDT jest zdefiniowany. |
| SS_UDT_SCHEMANAME | DBTYPE_WSTR | Dla kolumn UDT ta właściwość jest ciągiem określającym nazwę schematu, w którym UDT jest zdefiniowany. |
| SS_UDT_NAME | DBTYPE_WSTR | Nazwa UDT |
| SS_UDT_ASSEMBLY_TYPENAME | DBTYPE_WSTR | Pełna nazwa typu (AQN) zawiera nazwę typu poprzedzoną przestrzenią nazw, jeśli dotyczy. |
Dodatki i zmiany w zbiorach właściwości OLE DB
Sterownik OLE DB dla SQL Server dodaje nowe wartości lub zmiany do wielu podstawowych zestawów właściwości OLE DB.
Zbiór własności DBPROPSET_SQLSERVERPARAMETER
Aby wspierać UDT przez OLE DB, OLE DB Driver for SQL Server implementuje nowy zestaw właściwości DBPROPSET_SQLSERVERPARAMETER, który zawiera następujące wartości:
| Name | Typ | Description |
|---|---|---|
| SSPROP_PARAM_UDT_CATALOGNAME | DBTYPE_WSTR | Trzyczęściowy identyfikator imienia. Dla parametrów UDT ta właściwość jest ciągiem tekstów określającym nazwę katalogu, w którym zdefiniowany jest typ zdefiniowany przez użytkownika. |
| SSPROP_PARAM_UDT_SCHEMANAME | DBTYPE_WSTR | Trzyczęściowy identyfikator imienia. Dla parametrów UDT ta właściwość jest ciągiem tekstów określającym nazwę schematu, w którym zdefiniowany jest typ zdefiniowany przez użytkownika. |
| SSPROP_PARAM_UDT_NAME | DBTYPE_WSTR | Trzyczęściowy identyfikator imienia. Dla kolumn UDT ta właściwość to ciąg znaków określający pojedynczą nazwę części typu zdefiniowanego przez użytkownika. |
SSPROP_PARAM_UDT_NAME jest obowiązkowe. SSPROP_PARAM_UDT_CATALOGNAME i SSPROP_PARAM_UDT_SCHEMANAME są opcjonalne. Jeśli któraś z właściwości zostanie błędnie określona, DB_E_ERRORSINCOMMAND zostanie zwrócona. Jeśli ani SSPROP_PARAM_UDT_CATALOGNAME, ani SSPROP_PARAM_UDT_SCHEMANAME nie są określone, UDT musi być zdefiniowany w tej samej bazie danych i schemacie co tabela. Jeśli definicja UDT nie jest w tym samym schemacie co tabela (ale jest w tej samej bazie danych), to SSPROP_PARAM_UDT_SCHEMANAME musi być określona. Jeśli definicja UDT znajduje się w innej bazie danych, należy określić zarówno SSPROP_PARAM_UDT_CATALOGNAME, jak i SSPROP_PARAM_UDT_SCHEMANAME.
Zbiór własności DBPROPSET_SQLSERVERCOLUMN
Aby wspierać tworzenie tabel w interfejsie ITableDefinition , sterownik OLE DB dla SQL Server dodaje następujące trzy nowe kolumny do zestawu właściwości DBPROPSET_SQLSERVERCOLUMN.
| Name | Description | Typ | Description |
|---|---|---|---|
| SSPROP_COL_UDT_CATALOGNAME | UDT_CATALOGNAME | VT_BSTR | Dla kolumn typu DBTYPE_UDT ta właściwość jest ciągiem określającym nazwę katalogu, w którym zdefiniowany jest UDT. |
| SSPROP_COL_UDT_SCHEMANAME | UDT_SCHEMANAME | VT_BSTR | Dla kolumn typu DBTYPE_UDT ta własność jest ciągiem określającym nazwę schematu, w którym zdefiniowany jest UDT. |
| SSPROP_COL_UDT_NAME | UDT_NAME | VT_BSTR | Dla kolumn typu DBTYPE_UDT ta właściwość jest ciągiem określającym pojedynczą nazwę części UDT. Dla innych typów kolumn ta własność zwraca pusty ciąg znaków. |
Uwaga / Notatka
UDT nie pojawiają się w PROVIDER_TYPES zbiorze wierszy schematu. Wszystkie kolumny mają dostęp do odczytu i zapisu.
ADO będzie odwoływać się do tych właściwości, używając odpowiedniego wpisu w kolumnie Opis.
SSPROP_COL_UDTNAME jest obowiązkowe. SSPROP_COL_UDT_CATALOGNAME i SSPROP_COL_UDT_SCHEMANAME są opcjonalne. Jeśli któraś z właściwości zostanie błędnie określona, DB_E_ERRORSINCOMMAND zostanie zwrócona.
Jeśli ani SSPROP_COL_UDT_CATALOGNAME, ani SSPROP_COL_UDT_SCHEMANAME nie są określone, UDT musi być zdefiniowany w tej samej bazie danych i schemacie co tabela.
Jeśli definicja UDT nie jest w tym samym schemacie co tabela (ale jest w tej samej bazie 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, jak i SSPROP_COL_UDT_SCHEMANAME.
Dodatki i zmiany interfejsu OLE DB
Sterownik OLE DB dla SQL Server dodaje nowe wartości lub zmiany do wielu podstawowych interfejsów OLE DB.
Interfejs ISSCommandWithParameters
Aby wspierać UDT przez OLE DB, OLE DB Driver for SQL Server wprowadza szereg zmian, w tym dodanie interfejsu ISSCommandWithParameters . Ten nowy interfejs dziedziczy z rdzenia interfejsu OLE DB ICommandWithParameters. Oprócz trzech metod odziedziczonych z ICommandWithParameters; GetParameterInfo, MapParameterNames oraz SetParameterInfo; ISSCommandWithParameters udostępnia metody GetParameterProperties i SetParameterProperties , które są używane do obsługi specyficznych dla serwerów typów danych.
Uwaga / Notatka
Interfejs ISSCommandWithParameters również wykorzystuje nową strukturę SSPARAMPROPS.
Interfejs IColumnsRowset
Oprócz interfejsu ISSCommandWithParameters , sterownik OLE DB dla SQL Server dodaje także nowe wartości do zestawu wierszy zwracanych po wywołaniu metody IColumnsRowset::GetColumnRowset , w tym następujące.
| Nazwa kolumny | Typ | Description |
|---|---|---|
| DBCOLUMN_SS_UDT_CATALOGNAME | DBTYPE_WSTR | Identyfikator nazwy katalogowej 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 dla zespołu, która zawiera nazwę typu oraz wszystkie niezbędne identyfikacje zespołu do odniesienia przez CLR. |
Możesz odróżnić kolumnę UDT serwera od innych typów binarnych, gdy DBCOLUMN_TYPE jest ustawiony na DBTYPE_UDT, patrząc na dodane metadane UDT opisane w poprzedniej tabeli. Jeśli dane są częściowo kompletne, typ serwera to UDT. Dla typów serwerów innych niż UDT kolumny te zawsze zwracane są jako NULL.
Zobacz też
OLE DB Driver for SQL Server Features
ISSCommandWithParameters (OLE DB)