Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Vonatkozik a következőkre:SQL Server
Azure SQL Database
Analitikai Platform System (PDW)
Fontos
SQL Server Native Client (SNAC) nem kerül szállításra a következőkkel:
- SQL Server 2022 (16.x) és újabb verziók
- AZ SQL Server Management Studio 19- és újabb verziói
Az SQL Server natív ügyfele (SQLNCLI vagy SQLNCLI11) és az örökölt Microsoft OLE DB Provider for SQL Server (SQLOLEDB) nem ajánlott az új alkalmazásfejlesztéshez.
Új projektek esetén használja az alábbi illesztőprogramok egyikét:
Az SQL Server adatbázismotor (2012–2019) egyik összetevőjeként szállított SQLNCLI esetében tekintse meg az alábbi támogatási életciklus-kivételt.
Az SQL Server 2005 (9.x) bevezette a felhasználó által definiált típusokat (UDT-k). Az UDT-k kibővítik az SQL típus rendszert azzal, hogy lehetővé teszik objektumok és egyedi adatstruktúrák tárolását egy SQL Server adatbázisban. Az UDT-k több adattípust tartalmazhatnak, és viselkedésük is lehet, megkülönböztetve őket a hagyományos alias adattípusoktól, amelyek egyetlen SQL Server-rendszer adattípusából állnak. Az UDT-ket bármely olyan nyelven definiálják, amelyet a .NET common language runtime (CLR) támogat, és amely ellenőrizhető kódot eredményez. Ez magában foglalja a C# és a Visual Basic .NET programokat. Az adatok egy .NET osztály vagy struktúra mezőiként és tulajdonságaiként jelennek meg, és a viselkedéseket az osztály vagy struktúra módszerei határozzák meg.
Az UDT használható tábla oszlopdefiníciójaként, egy Transact-SQL adag változójaként, vagy egy Transact-SQL függvény vagy tárolt eljárás argumentumaként.
SQL Server natív ügyféloldali OLE DB-szolgáltató
Az SQL Server Native Client OLE DB szolgáltató bináris típusként támogatja az UDT-ket metaadat-információval, ami lehetővé teszi, hogy az UDT-ket objektumként kezeld. Az UDT oszlopok DBTYPE_UDT-ként jelennek meg, és metaadataik az IColumnRowset mag OLE DB interfészen és az új ISSCommandWithParameters interfészen keresztül jelennek meg.
Megjegyzés:
Az IRowsetFind::FindNextRow módszer nem működik az UDT adattípussal. DB_E_BADCOMPAREOP akkor jelenik meg, ha az UDT-t keresőoszlop-típusként használják.
Adatkötések és kényszerítések
Az alábbi táblázat leírja a kötést és kényszerítést, amely akkor jelentkezik, amikor a felsorolt adattípusokat SQL Server UDT-vel használjuk. Az UDT oszlopokat az SQL Server Native Client OLE DB szolgáltatója DBTYPE_UDT formátumban mutatja be. A megfelelő séma sorhalmazokon keresztül szerezheted a metaadatokat, így a saját definiált típusokat objektumként kezelheted.
| Adattípus | Szerverre UDT |
Szerverre nem-UDT |
A szerverről UDT |
A szerverről nem-UDT |
|---|---|---|---|---|
| DBTYPE_UDT | Támogatott 6 | 1. hiba | Támogatott 6 | 5-es hiba |
| DBTYPE_BYTES | Támogatott 6 | Nem elérhető2 | Támogatott 6 | Nem elérhető2 |
| DBTYPE_WSTR | Támogatott 3,6 | Nem elérhető2 | Támogatott 4,6 | Nem elérhető2 |
| DBTYPE_BSTR | Támogatott 3,6 | Nem elérhető2 | Támogatott 4 | Nem elérhető2 |
| DBTYPE_STR | Támogatott 3,6 | Nem elérhető2 | Támogatott 4,6 | Nem elérhető2 |
| DBTYPE_IUNKNOWN | Nem támogatott | Nem elérhető2 | Nem támogatott | Nem elérhető2 |
| DBTYPE_VARIANT (VT_UI1 | VT_ARRAY) | Támogatott 6 | Nem elérhető2 | Támogatott 4 | Nem elérhető2 |
| DBTYPE_VARIANT (VT_BSTR) | Támogatott 3,6 | Nem elérhető2 | N/A | Nem elérhető2 |
1Ha ICommandWithParameters::SetParameterInfo egy szervertípust az ICommandWithParameters::SetParameterInfo jelöl meg DBTYPE_UDT-től, és a kiegészítőtípus DBTYPE_UDT, hiba következik a mondatparancs végrehajtása esetén (DB_E_ERRORSOCCURRED; a paraméter állapota DBSTATUS_E_BADACCESSOR). Ellenkező esetben az adatokat elküldik a szervernek, de a szerver hibát ad, amely jelzi, hogy nincs implicit átalakítás az UDT-ből a paraméter adattípusára.
2Ezen a témán túl.
3 Adatátalakítás hex láncszálból bináris adatra történik.
4 A bináris adatból hex láncra történő adatátalakítás történik.
5A hitelesítés előfordulhat hozzáférés létrehozási időnél, vagy a behíváskor a hiba DB_E_ERRORSOCCURRED, kötési státusz DBBINDSTATUS_UNSUPPORTEDCONVERSION-re állítva.
6BY_REF használhatók.
DBTYPE_NULL és DBTYPE_EMPTY bemeneti paraméterekre köthetők, de kimeneti paraméterekre vagy eredményekre nem. Bemeneti paraméterekre korlátozva az állapotot DBSTATUS_S_ISNULL vagy DBSTATUS_S_DEFAULT be kell állítani.
DBTYPE_UDT átalakíthatók DBTYPE_EMPTY-re és DBTYPE_NULL-re is, de a DBTYPE_NULL és DBTYPE_EMPTY nem konvertálhatók DBTYPE_UDT-re. Ez összhangban van DBTYPE_BYTES-vel.
Megjegyzés:
Egy új interfészt használnak az UDT-k paraméterként való kezelésére, az ISSCommandWithParameters-t, amely az ICommandWithParameters-tól örököl. Az alkalmazásoknak ezt az interfészt kell használniuk ahhoz, hogy legalább az DBPROPSET_SQLSERVERPARAMETER tulajdonsághalmazának SSPROP_PARAM_UDT_NAME-jét beállítsák az UDT paraméterekhez. Ha ezt nem csinálják, az ICommand::Execute DB_E_ERRORSOCCURRED visszaad. Ezt az interfészt és tulajdonsághalmazt később ebben a témában ismertetjük.
Ha egy felhasználó által definiált típust beillesztünk egy olyan oszlopba, amely nem elég nagy ahhoz, hogy minden adatát tárolja, az ICommand::Execute DB_E_ERRORSOCCURRED státuszú S_OK-ot ad vissza.
Az OLE DB magszolgáltatások (IDataConvert) által biztosított adatátalakítások nem alkalmazhatók DBTYPE_UDT-re. Más kötések nem támogatottak.
OLE DB sorkészlet bővítések és változtatások
Az SQL Server Native Client új értékeket vagy változtatásokat ad hozzá sok alapvető OLE DB séma sorhalmazhoz.
A PROCEDURE_PARAMETERS séma sorkészlet
Az alábbi kiegészítéseket a PROCEDURE_PARAMETERS séma sorkészletéhez tettük.
| Oszlop név | Típus | Description |
|---|---|---|
| SS_UDT_CATALOGNAME | DBTYPE_WSTR | A háromrészes névazonosító. |
| SS_UDT_SCHEMANAME | DBTYPE_WSTR | A háromrészes névazonosító. |
| SS_UDT_NAME | DBTYPE_WSTR | A háromrészes névazonosító. |
| SS_UDT_ASSEMBLY_TYPENAME | DBTYPE_WSTR | A Assembly minősített név, amely tartalmazza a típusnevet és az összes assembly azonosítót, amelyre a CLR hivatkozik. |
A SQL_ASSEMBLIES séma sorkészlet
Az SQL Server Native Client OLE DB szolgáltató egy új szolgáltató-specifikus séma sorkészletet mutat be, amely leírja a regisztrált UDT-ket. A ASSEMBLY szerver DBTYPE_WSTR-ként is meghatározható, de nincs jelen a sorhalmazban. Ha nincs megadva, a sorhalmaz alapértelmezett jelenlegi szerverre fog váltani. A SQL_ASSEMBLIES séma sorhalmazát a következő táblázat definiálja.
| Oszlop név | Típus | Description |
|---|---|---|
| ASSEMBLY_CATALOG | DBTYPE_WSTR | Az összeállítás katalógusneve, amely tartalmazza a típust. |
| ASSEMBLY_SCHEMA | DBTYPE_WSTR | A típust tartalmazó assembly séma neve, vagyis tulajdonos neve. Bár az összeállításokat adatbázis szerint szabályozzák, nem séma alapján, mégis van tulajdonosuk, ami itt is tükröződik. |
| ASSEMBLY_NAME | DBTYPE_WSTR | Az összeállítás neve, amely tartalmazza a típust. |
| ASSEMBLY_ID | DBTYPE_UI4 | Az objektumazonosító az összeállításban, amely tartalmazza a típust. |
| PERMISSION_SET | DBTYPE_WSTR | Egy érték, amely a assembly hozzáférési körét jelzi. Az értékek közé tartozik a "SAFE", "EXTERNAL_ACCESS" és "UNSAFE". |
| ASSEMBLY_BINARY | DBTYPE_BYTES | A gyűlés bináris ábrázolása. |
A SQL_ASSEMBLIES_ DEPENDENCIES séma sorhalmaza
Az SQL Server Native Client OLE DB szolgáltató egy új, szolgáltató-specifikus sémasorkészletet tesz közzé, amely leírja egy adott szerver assembly függőségeit. ASSEMBLY_SERVER a hívó által megjelölhető DBTYPE_WSTR, de nincs jelen a sorhalmazban. Ha nincs megadva, a sorhalmaz alapértelmezett jelenlegi szerverre fog váltani. Az SQL_ASSEMBLY_DEPENDENCIES séma sorhalmazát a következő táblázat definiálja.
| Oszlop név | Típus | Description |
|---|---|---|
| ASSEMBLY_CATALOG | DBTYPE_WSTR | Az összeállítás katalógusneve, amely tartalmazza a típust. |
| ASSEMBLY_SCHEMA | DBTYPE_WSTR | A típust tartalmazó assembly séma neve, vagyis tulajdonos neve. Bár az összeállításokat adatbázis szerint szabályozzák, nem séma alapján, mégis van tulajdonosuk, ami itt is tükröződik. |
| ASSEMBLY_ID | DBTYPE_UI4 | Az összeszerelés tárgyazonosítója. |
| REFERENCED_ASSEMBLY_ID | DBTYPE_UI4 | A hivatkozott assembly objektumazonosítója. |
A SQL_USER_TYPES séma sorkészlete
SQL Server Native Client OLE DB szolgáltató új séma sorkészletet, SQL_USER_TYPES-t mutat be, amely leírja, mikor adják hozzá egy adott szerver regisztrált UDT-it. UDT_SERVER a hívónak meg kell határoznia DBTYPE_WSTR, de nincs jelen a sorhalmazban. A SQL_USER_TYPES séma sorhalmazát az alábbi táblázat definiálja.
| Oszlop név | Típus | Description |
|---|---|---|
| UDT_CATALOGNAME | DBTYPE_WSTR | UDT oszlopok esetén ez a tulajdonság egy string, amely megadja annak a katalógusnak a nevét, ahol az UDT meg van definiálva. |
| UDT_SCHEMANAME | DBTYPE_WSTR | UDT oszlopok esetén ez a tulajdonság egy string, amely megadja annak a sémának a nevét, ahol az UDT definiálva van. |
| UDT_NAME | DBTYPE_WSTR | Az UDT osztályt tartalmazó assembly neve. |
| UDT_ASSEMBLY_TYPENAME | DBTYPE_WSTR | A teljes típusnév (AQN) tartalmazza a névteret előtagokkal, ha alkalmazható. |
A COLUMNS séma sorkészlete
A COLUMNS séma sorhalmazához kiegészítések a következőket tartalmazzák.
| Oszlop név | Típus | Description |
|---|---|---|
| SS_UDT_CATALOGNAME | DBTYPE_WSTR | UDT oszlopok esetén ez a tulajdonság egy string, amely megadja annak a katalógusnak a nevét, ahol az UDT meg van definiálva. |
| SS_UDT_SCHEMANAME | DBTYPE_WSTR | UDT oszlopok esetén ez a tulajdonság egy string, amely megadja annak a sémának a nevét, ahol az UDT definiálva van. |
| SS_UDT_NAME | DBTYPE_WSTR | Az UDT neve |
| SS_UDT_ASSEMBLY_TYPENAME | DBTYPE_WSTR | A teljes típusnév (AQN) tartalmazza a névteret előtagokkal, ha alkalmazható. |
OLE DB Property Set kiegészítések és változtatások
Az SQL Server Native Client új értékeket vagy változtatásokat ad hozzá sok OLE DB alapvető tulajdonsághalmazhoz.
A DBPROPSET_SQLSERVERPARAMETER tulajdonsághalmaz
Az UDT-k támogatásához az OLE DB-n keresztül a SQL Server Native Client megvalósítja az új DBPROPSET_SQLSERVERPARAMETER tulajdonsághalmazt, amely tartalmazza a következő értékeket.
| Név | Típus | Description |
|---|---|---|
| SSPROP_PARAM_UDT_CATALOGNAME | DBTYPE_WSTR | A háromrészes névazonosító. Az UDT paraméterek esetén ez a tulajdonság egy string, amely megadja annak a katalógusnak a nevét, ahol a felhasználó által definiált típus van meghatározva. |
| SSPROP_PARAM_UDT_SCHEMANAME | DBTYPE_WSTR | A háromrészes névazonosító. UDT paramétereknél ez a tulajdonság egy string, amely megadja annak a sémának a nevét, ahol a felhasználó által definiált típus van meghatározva. |
| SSPROP_PARAM_UDT_NAME | DBTYPE_WSTR | A háromrészes névazonosító. UDT oszlopok esetén ez a tulajdonság egy string, amely megadja a felhasználó által definiált típus egyetlen résznevét. |
SSPROP_PARAM_UDT_NAME kötelező. SSPROP_PARAM_UDT_CATALOGNAME és SSPROP_PARAM_UDT_SCHEMANAME opcionálisak. Ha bármelyik tulajdonság hibásan van megadva DB_E_ERRORSINCOMMAND vissza fogják térni. Ha mind a SSPROP_PARAM_UDT_CATALOGNAME, mind a SSPROP_PARAM_UDT_SCHEMANAME nincs megadva, akkor az UDT-t ugyanabban az adatbázisban és sémában kell definiálni, mint a táblát. Ha az UDT definíció nem ugyanabban a sémában van, mint a tábla (de ugyanabban az adatbázisban van), akkor SSPROP_PARAM_UDT_SCHEMANAME meg kell határozni. Ha az UDT definíciója egy másik adatbázisban van, akkor mind a SSPROP_PARAM_UDT_CATALOGNAME-t, mind a SSPROP_PARAM_UDT_SCHEMANAME-t meg kell határozni.
A DBPROPSET_SQLSERVERCOLUMN tulajdonsághalmaz
Az ITableDefinition felületben lévő táblák létrehozásának támogatásához az SQL Server Native Client a következő három új oszlopot ad hozzá a DBPROPSET_SQLSERVERCOLUMN tulajdonsághalmazhoz.
| Név | Description | Típus | Description |
|---|---|---|---|
| SSPROP_COL_UDT_CATALOGNAME | UDT_CATALOGNAME | VT_BSTR | DBTYPE_UDT típusú oszlopok esetén ez a tulajdonság egy láncsor, amely megadja annak a katalógusnak a nevét, ahol az UDT meg van definiálva. |
| SSPROP_COL_UDT_SCHEMANAME | UDT_SCHEMANAME | VT_BSTR | DBTYPE_UDT típusú oszlopok esetén ez a tulajdonság egy string, amely megadja annak a sémának a nevét, ahol az UDT definiálva van. |
| SSPROP_COL_UDT_NAME | UDT_NAME | VT_BSTR | Az DBTYPE_UDT típusú oszlopok esetében ez a tulajdonság egy láncsor, amely megadja az UDT egyetlen résznevét. Más oszloptípusoknál ez a tulajdonság üres stringet ad vissza. |
Megjegyzés:
Az UDT-k nem jelennek meg a PROVIDER_TYPES séma sorhalmazában. Minden oszlopnak van olvasási és írási hozzáférése.
Az ADO ezekre a tulajdonságokra a Leírás oszlopban található megfelelő bejegyzés segítségével hivatkozik.
SSPROP_COL_UDTNAME kötelező. SSPROP_COL_UDT_CATALOGNAME és SSPROP_COL_UDT_SCHEMANAME opcionálisak. Ha bármelyik tulajdonságot hibásan jelölik meg, DB_E_ERRORSINCOMMAND visszakerül.
Ha sem SSPROP_COL_UDT_CATALOGNAME, sem SSPROP_COL_UDT_SCHEMANAME nincs megadva, az UDT-t ugyanabban az adatbázisban és sémában kell definiálni, mint a táblázat.
Ha az UDT definíciója nem ugyanabban a sémában van, mint a tábla (de ugyanabban az adatbázisban van), SSPROP_COL_UDT_SCHEMANAME meg kell határozni.
Ha az UDT definíciója egy másik adatbázisban van, mind a SSPROP_COL_UDT_CATALOGNAME-t, mind a SSPROP_COL_UDT_SCHEMANAME-t meg kell határozni.
OLE DB interfész kibővítések és változtatások
Az SQL Server Native Client új értékeket vagy módosításokat ad hozzá sok alapvető OLE DB interfészhez.
Az ISSCommandWithParameters interfész
Az UDT-k támogatásához az OLE DB-n keresztül a SQL Server Native Client számos változtatást valósít meg, beleértve az ISSCommandWithParameters interfész hozzáadását. Ez az új interfész az ICommandWithParameters mag OLE DB interfészből örököl. Az ICommandWithParameters-től örökölt három módszer mellett; GetParameterInfo, MapParameterNames és SetParameterInfo; Az ISSCommandWithParameters biztosítja a GetParameterProperties és SetParameterProperties metódusokat, amelyeket szerverspecifikus adattípusok kezelésére használnak.
Megjegyzés:
Az ISSCommandWithParameters interfész szintén az új SSPARAMPROPS struktúrát használja.
Az IColumnsRowset interfész
Az ISSCommandWithParameters interfészen túl az SQL Server Native Client új értékeket is hozzáad a sorhalmazhoz, amely az IColumnsRowset::GetColumnRowset metódus meghívásából származik, beleértve a következőket.
| Az oszlop neve | Típus | Description |
|---|---|---|
| DBCOLUMN_SS_UDT_CATALOGNAME | DBTYPE_WSTR | Egy UDT katalógusnévazonosító. |
| DBCOLUMN_SS_UDT_SCHEMANAME | DBTYPE_WSTR | Egy UDT séma névazonosító. |
| DBCOLUMN_SS_UDT_NAME | DBTYPE_WSTR | Egy UDT névazonosító. |
| DBCOLUMN_SS_ASSEMBLY_TYPENAME | DBTYPE_WSTR | Az assembly minősített név, amely tartalmazza a típusnevet és az összes assembly azonosítót, amely szükséges a CLR számára. |
Meg lehet különböztetni egy szerver UDT oszlopot más bináris típusoktól, ha a DBCOLUMN_TYPE DBTYPE_UDT-re van állítva, ha megnézed a fent említett hozzáadott UDT metaadatokat. Ha az adatok részben teljesek, akkor a szerver típusa UDT. Nem UDT szervertípusok esetén ezek az oszlopok mindig NULL értékben jelennek meg.
SQL Server natív kliens ODBC driver
Számos változtatást hajtottak végre az SQL Server Native Client ODBC illezőprogramban, hogy támogassa az UDT-ket. Az SQL Server Native Client ODBC illesztőprogram az SQL Server UDT-t SQL_SS_UDT illesztőgép-specifikus SQL adattípus-azonosítóhoz képezi. Az UDT oszlopok SQL_SS_UDT felületűek. Ha egy UDT oszlopot kifejezetten egy másik típushoz jelölünk egy SQL utasításban az UDT ToString vagy ToXMLString módszereivel, vagy a CAST/CONVERT függvény segítségével, akkor az eredményhalmazban lévő oszlop típusa tükrözi azt a típust, amelyre az oszlopot átalakították
SQLColAttribute, SQLDescribeParam, SQLGetDescField
Négy új, driver-specifikus leíró mezőt adtak hozzá, hogy további információkat nyújtsanak az eredményhalmaz UDT oszlopához, vagy tárolt eljárás/paraméterezett lekérdezés UDT paraméteréhez, amelyeket az SQLColAttribute, SQLDescribeParam és SQLGetDescField függvények segítségével lehet letölteni.
A négy új leíró mező a SQL_CA_SS_UDT_CATALOG_NAME, SQL_CA_SS_UDT_SCHEMA_NAME, SQL_CA_SS_UDT_TYPE_NAME és SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME.
SQLColumns, SQLProcedureColumns
Ezen felül három új, illesztő-specifikus oszlop kerül az eredményhalmazba, amelyet az SQLColumns és SQLProcedureColumns függvények visszaadnak, hogy további információkat nyújtsanak az UDT eredményhalmaz oszlopáról vagy egy UDT paraméterről. Ez a három új oszlop: SS_UDT_CATALOG_NAME, SS_UDT_SCHEMA_NAME és SS_UDT_ASSEMBLY_TYPE_NAME.
Támogatott átalakulások
SQL-ről C-re történő átváltáskor a SQL_C_WCHAR, SQL_C_BINARY és SQL_C_CHAR mind átalakíthatók SQL_SS_UDT-re. Fontos azonban megjegyezni, hogy a bináris adatokat hatszög láncsorrá alakítják át, amikor SQL_C_WCHAR és SQL_C_CHAR SQL adattípusokból konvertálnak.
C-ről SQL-re történő átkonvertáláskor a SQL_C_WCHAR, SQL_C_BINARY és SQL_C_CHAR mind átalakíthatók SQL_SS_UDT-re. Fontos azonban megjegyezni, hogy a bináris adat hatszög láncra alakul, amikor az SQL_C_WCHAR és SQL_C_CHAR SQL adattípusokból konvertálnak.
Lásd még:
SQL Server natív kliens funkciói
ISSCommandWithParameters (OLE DB)