Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na:SQL Server
Azure SQL Database
Analytický platformový systém (PDW)
Důležité
SQL Server Native Client (SNAC) není dodáván s:
- SQL Server 2022 (16.x) a novější verze
- SQL Server Management Studio 19 a novější verze
Pro vývoj nových aplikací se nedoporučuje nativní klient SQL Serveru (SQLNCLI nebo SQLNCLI11) a starší zprostředkovatel Microsoft OLE DB pro SQL Server (SQLOLEDB).
Pro nové projekty použijte jeden z následujících ovladačů:
Informace o SQLNCLI, které se dodává jako součást databázového stroje SQL Serveru (verze 2012 až 2019), naleznete v tomto support lifecycle exception.
SQL Server 2005 (9.x) zavedl uživatelsky definované typy (UDT). UDT rozšiřují SQL typ systém tím, že umožňují ukládat objekty a vlastní datové struktury do databáze SQL Serveru. UDT můžou obsahovat více datových typů a můžou mít různá chování a liší se od tradičních datových typů aliasů, které se skládají z jednoho systémového datového typu SQL Serveru. UDT jsou definovány pomocí kteréhokoli z jazyků podporovaných běžným jazykem .NET (CLR), které produkují ověřitelný kód. To zahrnuje C# a Visual Basic .NET. Data jsou vystavena jako pole a vlastnosti .NET třídy nebo struktury a chování je definováno metodami třídy nebo struktury.
UDT může být použit jako sloupcová definice tabulky, jako proměnná v Transact-SQL dávce, nebo jako argument Transact-SQL funkce či uložené procedury.
Zprostředkovatel OLE DB nativního klienta SQL Serveru
SQL Server Native Client OLE DB podporuje UDT jako binární typy s metadaty, což umožňuje spravovat UDT jako objekty. UDT sloupce jsou vystaveny jako DBTYPE_UDT a jejich metadata jsou vystavena prostřednictvím základního rozhraní OLE DB IColumnRowset a nového rozhraní ISSCommandWithParameters .
Poznámka:
Metoda IRowsetFind::FindNextRow nefunguje s datovým typem UDT. DB_E_BADCOMPAREOP se vrátí, pokud je UDT použit jako typ vyhledávacího sloupce.
Vazby dat a nátlaky
Následující tabulka popisuje vazby a nátlak, ke kterému dochází při použití uvedených datových typů s SQL Server UDT. UDT sloupce jsou zpřístupněny prostřednictvím SQL Server Native Client OLE DB poskytovatele jako DBTYPE_UDT. Metadata můžete získat přes příslušné sady řádků schématu, abyste mohli spravovat své vlastní definované typy jako objekty.
| Datový typ | Na server UDT |
Na server ne-UDT |
Ze serveru UDT |
Ze serveru ne-UDT |
|---|---|---|---|---|
| DBTYPE_UDT | Podporováno6 | Chyba1 | Podporováno6 | Chyba5 |
| DBTYPE_BYTES | Podporováno6 | Není k dispozici2 | Podporováno6 | Není k dispozici2 |
| DBTYPE_WSTR | Podporováno3,6 | Není k dispozici2 | Podporováno4,6 | Není k dispozici2 |
| DBTYPE_BSTR | Podporováno3,6 | Není k dispozici2 | Podporováno4 | Není k dispozici2 |
| DBTYPE_STR | Podporováno3,6 | Není k dispozici2 | Podporováno4,6 | Není k dispozici2 |
| DBTYPE_IUNKNOWN | Není podporováno | Není k dispozici2 | Není podporováno | Není k dispozici2 |
| DBTYPE_VARIANT (VT_UI1 | VT_ARRAY) | Podporováno6 | Není k dispozici2 | Podporováno4 | Není k dispozici2 |
| DBTYPE_VARIANT (VT_BSTR) | Podporováno3,6 | Není k dispozici2 | N/A | Není k dispozici2 |
1Pokud je jiný typ serveru než DBTYPE_UDT zadán pomocí ICommandWithParameters::SetParameterInfo a typ přístupového modulu je DBTYPE_UDT, při vykonání příkazu dojde k chybě (DB_E_ERRORSOCCURRED; stav parametru je DBSTATUS_E_BADACCESSOR). Jinak jsou data odeslána serveru, ale server vrátí chybu, že nedochází k implicitnímu převodu z UDT na datový typ parametru.
2Mimo rámec tohoto tématu.
3 Dochází k převodu dat z hexadecimalního řetězce na binární data.
4 Dochází k převodu dat z binárních dat na hexadecimální řetězec.
5Ověření může proběhnout při vytvoření přístupu, nebo při načítání, chyba je DB_E_ERRORSOCCURRED, stav vazby nastaven na DBBINDSTATUS_UNSUPPORTEDCONVERSION.
6BY_REF lze použít.
DBTYPE_NULL a DBTYPE_EMPTY mohou být omezeny pro vstupní parametry, ale ne pro výstupní parametry nebo výsledky. Pokud je omezen vstupní parametry, musí být stav nastaven na DBSTATUS_S_ISNULL nebo DBSTATUS_S_DEFAULT.
DBTYPE_UDT lze také převést na DBTYPE_EMPTY a DBTYPE_NULL, ale DBTYPE_NULL a DBTYPE_EMPTY nelze převést na DBTYPE_UDT. To odpovídá DBTYPE_BYTES.
Poznámka:
Pro práci s UDT jako parametry se používá nové rozhraní, ISSCommandWithParameters, které dědí z ICommandWithParameters. Aplikace musí použít toto rozhraní k nastavení alespoň SSPROP_PARAM_UDT_NAME sady DBPROPSET_SQLSERVERPARAMETER vlastností pro parametry UDT. Pokud to není provedeno, ICommand::Execute vrátí DB_E_ERRORSOCCURRED. Tato rozhraní a sada vlastností jsou popsány později v tomto tématu.
Pokud je uživatelsky definovaný typ vložen do sloupce, který není dostatečně velký pro všechna jeho data, ICommand::Execute S_OK vrátí se stavem DB_E_ERRORSOCCURRED.
Převody dat poskytované základními službami OLE DB (IDataConvert) nejsou pro DBTYPE_UDT použitelné. Nejsou podporovány žádné jiné vazby.
Přidání a změny řádků v OLE DB
SQL Server Native Client přidává nové hodnoty nebo změny do mnoha základních řádků schématu OLE DB.
Řádková sada PROCEDURE_PARAMETERS schématu
Do řádků PROCEDURE_PARAMETERS schématu byly provedeny následující doplňky.
| Název sloupce | Typ | Description |
|---|---|---|
| SS_UDT_CATALOGNAME | DBTYPE_WSTR | Třídílný identifikátor jména. |
| SS_UDT_SCHEMANAME | DBTYPE_WSTR | Třídílný identifikátor jména. |
| SS_UDT_NAME | DBTYPE_WSTR | Třídílný identifikátor jména. |
| SS_UDT_ASSEMBLY_TYPENAME | DBTYPE_WSTR | Název Assembly Qualified Name, který zahrnuje název typu a veškerou identifikaci sestavy potřebné k odkazu CLR. |
Řádková sada SQL_ASSEMBLIES schéma
SQL Server Native Client OLE DB poskytuje nový poskytovatelsky specifický systém řádků schématu, který popisuje registrované UDT. Server ASSEMBLY může být specifikován jako DBTYPE_WSTR, ale není přítomen v sadě řádků. Pokud není specifikováno, sada řádků bude výchozím nastavením aktuálního serveru. Řádková sada SQL_ASSEMBLIES schématu je definována v následující tabulce.
| Název sloupce | Typ | Description |
|---|---|---|
| ASSEMBLY_CATALOG | DBTYPE_WSTR | Katalogový název sestavy, která typ obsahuje. |
| ASSEMBLY_SCHEMA | DBTYPE_WSTR | Název schématu nebo vlastníka assembleru, který typ obsahuje. Ačkoliv jsou sestavy zaměřeny podle databáze a nikoli podle schématu, stále mají vlastníka, který je zde patrný. |
| ASSEMBLY_NAME | DBTYPE_WSTR | Název sestavy, která typ obsahuje. |
| ASSEMBLY_ID | DBTYPE_UI4 | Objektové ID assembleru, který obsahuje daný typ. |
| PERMISSION_SET | DBTYPE_WSTR | Hodnota, která označuje rozsah přístupu pro sestavu. Hodnoty zahrnují "BEZPEČNÉ", "EXTERNAL_ACCESS" a "NEBEZPEČNÉ". |
| ASSEMBLY_BINARY | DBTYPE_BYTES | Binární reprezentace shromáždění. |
Řádky schématu SQL_ASSEMBLIES_ DEPENDENCIES
SQL Server Native Client OLE DB poskytuje nový poskytovatelsky specifický schématový řádkový systém, který popisuje závislosti assembleru pro specifikovaný server. ASSEMBLY_SERVER může volající specifikovat jako DBTYPE_WSTR, ale není přítomen v sadě řádků. Pokud není specifikováno, sada řádků bude výchozím nastavením aktuálního serveru. Řádková sada SQL_ASSEMBLY_DEPENDENCIES schématu je definována v následující tabulce.
| Název sloupce | Typ | Description |
|---|---|---|
| ASSEMBLY_CATALOG | DBTYPE_WSTR | Katalogový název sestavy, která typ obsahuje. |
| ASSEMBLY_SCHEMA | DBTYPE_WSTR | Název schématu nebo vlastníka assembleru, který typ obsahuje. Ačkoliv jsou sestavy omezeny databází a nikoli schématem, stále mají vlastníka, což je zde patrné. |
| ASSEMBLY_ID | DBTYPE_UI4 | Objektové ID sestavení. |
| REFERENCED_ASSEMBLY_ID | DBTYPE_UI4 | Objektové ID referenčního sestavení. |
Řádková sada SQL_USER_TYPES Schema
SQL Server Native Client OLE DB poskytuje nový schématový řádkový soubor, SQL_USER_TYPES, který popisuje, kdy jsou přidány registrované UDT pro konkrétní server. UDT_SERVER musí být volajícím určen jako DBTYPE_WSTR, ale není přítomen v sadě řádků. Řádková sada SQL_USER_TYPES schématu je definována v následující tabulce.
| Název sloupce | Typ | Description |
|---|---|---|
| UDT_CATALOGNAME | DBTYPE_WSTR | Pro sloupce UDT je tato vlastnost řetězec specifikující název katalogu, ve kterém je UDT definován. |
| UDT_SCHEMANAME | DBTYPE_WSTR | Pro sloupce UDT je tato vlastnost řetězec specifikující název schématu, ve kterém je UDT definováno. |
| UDT_NAME | DBTYPE_WSTR | Název sestavy obsahující třídu UDT. |
| UDT_ASSEMBLY_TYPENAME | DBTYPE_WSTR | Plný název typu (AQN) obsahuje název typu s předponou jmenného prostoru, pokud je to relevantní. |
Řádková sada schématu COLUMNS
Doplňky do sady řádků schématu COLUMNS zahrnují následující sloupce.
| Název sloupce | Typ | Description |
|---|---|---|
| SS_UDT_CATALOGNAME | DBTYPE_WSTR | Pro sloupce UDT je tato vlastnost řetězec specifikující název katalogu, ve kterém je UDT definován. |
| SS_UDT_SCHEMANAME | DBTYPE_WSTR | Pro sloupce UDT je tato vlastnost řetězec specifikující název schématu, ve kterém je UDT definováno. |
| SS_UDT_NAME | DBTYPE_WSTR | Název UDT |
| SS_UDT_ASSEMBLY_TYPENAME | DBTYPE_WSTR | Plný název typu (AQN) obsahuje název typu s předponou jmenného prostoru, pokud je to relevantní. |
Přidání a změny sad vlastností OLE DB
SQL Server Native Client přidává nové hodnoty nebo změny do mnoha základních sad vlastností OLE DB.
Vlastnostní množina DBPROPSET_SQLSERVERPARAMETER
Aby bylo možné podporovat UDT prostřednictvím OLE DB, SQL Server Native Client implementuje novou sadu vlastností DBPROPSET_SQLSERVERPARAMETER, která obsahuje následující hodnoty.
| Název | Typ | Description |
|---|---|---|
| SSPROP_PARAM_UDT_CATALOGNAME | DBTYPE_WSTR | Třídílný identifikátor jména. Pro parametry UDT je tato vlastnost řetězcem, který specifikuje název katalogu, kde je uživatelsky definovaný typ definován. |
| SSPROP_PARAM_UDT_SCHEMANAME | DBTYPE_WSTR | Třídílný identifikátor jména. Pro parametry UDT je tato vlastnost řetězec, který určuje název schématu, kde je uživatelem definovaný typ. |
| SSPROP_PARAM_UDT_NAME | DBTYPE_WSTR | Třídílný identifikátor jména. Pro sloupce UDT je tato vlastnost řetězec, který určuje jediný název části uživatelem definovaného typu. |
SSPROP_PARAM_UDT_NAME je povinné. SSPROP_PARAM_UDT_CATALOGNAME a SSPROP_PARAM_UDT_SCHEMANAME jsou volitelné. Pokud je některá z vlastností zadána nesprávně, DB_E_ERRORSINCOMMAND bude vrácena. Pokud nejsou specifikovány ani SSPROP_PARAM_UDT_CATALOGNAME, ani SSPROP_PARAM_UDT_SCHEMANAME, pak musí být UDT definován ve stejné databázi a schématu jako tabulka. Pokud definice UDT není ve stejném schématu jako tabulka (ale je ve stejné databázi), musí být SSPROP_PARAM_UDT_SCHEMANAME specifikována. Pokud je definice UDT v jiné databázi, musí být specifikovány jak SSPROP_PARAM_UDT_CATALOGNAME, tak SSPROP_PARAM_UDT_SCHEMANAME.
Množina vlastností DBPROPSET_SQLSERVERCOLUMN
Pro podporu vytváření tabulek v rozhraní ITableDefinition přidává SQL Server Native Client následující tři nové sloupce do sady DBPROPSET_SQLSERVERCOLUMN.
| Název | Description | Typ | Description |
|---|---|---|---|
| SSPROP_COL_UDT_CATALOGNAME | UDT_CATALOGNAME | VT_BSTR | Pro sloupce typu DBTYPE_UDT je tato vlastnost řetězec specifikující název katalogu, ve kterém je UDT definován. |
| SSPROP_COL_UDT_SCHEMANAME | UDT_SCHEMANAME | VT_BSTR | Pro sloupce typu DBTYPE_UDT je tato vlastnost řetězec specifikující název schématu, ve kterém je UDT definováno. |
| SSPROP_COL_UDT_NAME | UDT_NAME | VT_BSTR | Pro sloupce typu DBTYPE_UDT je tato vlastnost řetězec specifikující jediný název součásti UDT. Pro jiné typy sloupců tato vlastnost vrací prázdný řetězec. |
Poznámka:
UDT se v řádku PROVIDER_TYPES schématu neobjevují. Všechny sloupce mají přístup ke čtení a zápisu.
ADO bude tyto vlastnosti označovat pomocí příslušného záznamu ve sloupci Popis.
SSPROP_COL_UDTNAME je povinné. SSPROP_COL_UDT_CATALOGNAME a SSPROP_COL_UDT_SCHEMANAME jsou volitelné. Pokud je některá z vlastností zadána nesprávně, DB_E_ERRORSINCOMMAND se vrátí.
Pokud není specifikován ani SSPROP_COL_UDT_CATALOGNAME, ani SSPROP_COL_UDT_SCHEMANAME, musí být UDT definováno ve stejné databázi a schématu jako tabulka.
Pokud definice UDT není ve stejném schématu jako tabulka (ale je ve stejné databázi), musí být SSPROP_COL_UDT_SCHEMANAME specifikována.
Pokud je definice UDT v jiné databázi, musí být specifikována jak SSPROP_COL_UDT_CATALOGNAME, tak SSPROP_COL_UDT_SCHEMANAME.
Rozšíření a změny rozhraní OLE DB
SQL Server Native Client přidává nové hodnoty nebo změny do mnoha základních rozhraní OLE DB.
Rozhraní ISSCommandWithParameters
Pro podporu UDT prostřednictvím OLE DB implementuje SQL Server Native Client řadu změn, včetně přidání rozhraní ISSCommandWithParameters . Toto nové rozhraní dědí z jádra rozhraní OLE DB ICommandWithParameters. Kromě tří metod zděděných z ICommandWithParameters; GetParameterInfo, MapParameterNames a SetParameterInfo; ISSCommandWithParameters poskytuje metody GetParameterProperties a SetParameterProperties , které se používají pro zpracování serverově specifických datových typů.
Poznámka:
Rozhraní ISSCommandWithParameters také využívá novou strukturu SSPARAMPROPS.
Rozhraní IColumnsRowset
Kromě rozhraní ISSCommandWithParameters přidává SQL Server Native Client také nové hodnoty do sady řádků vrácených voláním metody IColumnsRowset::GetColumnRowset , včetně následujících.
| Název sloupce | Typ | Description |
|---|---|---|
| DBCOLUMN_SS_UDT_CATALOGNAME | DBTYPE_WSTR | Identifikátor názvu katalogu UDT. |
| DBCOLUMN_SS_UDT_SCHEMANAME | DBTYPE_WSTR | Identifikátor názvu schématu UDT. |
| DBCOLUMN_SS_UDT_NAME | DBTYPE_WSTR | Identifikátor názvu UDT. |
| DBCOLUMN_SS_ASSEMBLY_TYPENAME | DBTYPE_WSTR | Kvalifikovaný název sestavy, který zahrnuje typ a veškerou identifikaci sestavy potřebnou k odkazu CLR. |
Sloupec UDT serveru můžete odlišit od ostatních binárních typů, když je DBCOLUMN_TYPE nastaven na DBTYPE_UDT podle výše uvedených přidaných metadat UDT. Pokud jsou tato data částečně kompletní, typ serveru je UDT. Pro typy serverů mimo UDT jsou tyto sloupce vždy vráceny jako NULL.
SQL Server Native Client ODBC Driver
V SQL Server Native Client ODBC ovladači bylo provedeno několik změn pro podporu UDT. SQL Server Native Client ODBC ovladač mapuje SQL Server UDT na SQL_SS_UDT identifikátor SQL datového typu specifický pro ovladač. Sloupky UDT jsou povrchově upraveny jako SQL_SS_UDT. Pokud explicitně namapujete sloupec UDT na jiný typ v SQL příkazu pomocí metod ToString nebo ToXMLString v UDT nebo přes funkci CAST/CONVERT , typ sloupce ve výsledné sadě odráží skutečný typ, na který byl sloupec převeden
SQLColAttribute, SQLDescribeParam, SQLGetDescField
Byly přidány čtyři nové specifické pro ovladače deskriptorová pole, která poskytují další informace buď pro sloupec UDT ve výsledné sadě, nebo pro parametr UDT uloženého postupu/parametrizovaného dotazu, který lze získat pomocí funkcí SQLColAttribute, SQLDescribeParam a SQLGetDescField .
Čtyři nová deskriptorová pole, která byla přidána, jsou SQL_CA_SS_UDT_CATALOG_NAME, SQL_CA_SS_UDT_SCHEMA_NAME, SQL_CA_SS_UDT_TYPE_NAME a SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME.
SQLColumns, SQLProcedureColumns
Kromě toho jsou do sady výsledků vrácené funkcemi SQLColumns a SQLProcedureColumns přidány tři nové sloupce specifické pro ovladače, které poskytují další informace buď o sloupci výsledkové sady UDT, nebo o parametru UDT. Tyto tři nové sloupky jsou SS_UDT_CATALOG_NAME, SS_UDT_SCHEMA_NAME a SS_UDT_ASSEMBLY_TYPE_NAME.
Podporované konverze
Při převodu z SQL do C datových typů lze SQL_C_WCHAR, SQL_C_BINARY a SQL_C_CHAR převést na SQL_SS_UDT. Všimněte si však, že binární data jsou při převodu z SQL_C_WCHAR a SQL_C_CHAR SQL datových typů převedena na hexadecimální řetězec.
Při převodu z C na SQL datové typy lze převést SQL_C_WCHAR, SQL_C_BINARY a SQL_C_CHAR na SQL_SS_UDT. Všimněte si však, že binární data jsou při převodu z SQL_C_WCHAR a SQL_C_CHAR SQL datových typů převedena na hexadecimální řetězec.
Viz také
SQL Server Native Client Features
ISSCommandWithParameters (OLE DB)