Megosztás:


Ritka oszlopok támogatása az SQL Server natív ügyfélprogramban

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Fontos

Natív SQL Server-ügyfél (SNAC) nem a következőkkel szállítható:

  • 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 összetevőjeként (2012–2019-ben) futó SQLNCLI esetében tekintse meg ezt a Támogatási életciklus kivétel.

Az SQL Server natív ügyfele támogatja a ritka oszlopokat. További információ az SQL Server ritka oszlopairól: Ritka oszlopok használata és Oszlopkészletek használata.

További információ az SQL Server natív ügyfélprogram ritka oszlopainak támogatásáról: Ritka oszlopok támogatása (ODBC) és Ritka oszlopok támogatása (OLE DB).

Felhasználói forgatókönyvek ritka oszlopokhoz és natív SQL Server-ügyfélhez

Az alábbi táblázat az SQL Server natív ügyfélfelhasználóinak gyakori felhasználói forgatókönyveit foglalja össze ritka oszlopokkal:

Forgatókönyv Magatartás
válassza a * lehetőséget a vagy az IOpenRowset::OpenRowset táblából. Visszaadja az összes olyan oszlopot, amely nem tagja a ritka column_set, valamint egy XML-oszlopot, amely a ritka column_settagjai összes nem null oszlop értékét tartalmazza.
Hivatkozás egy oszlopra név szerint. Az oszlopra a ritka oszlopállapottól vagy column_set tagságtól függetlenül hivatkozhat.
A column_set tagoszlopok elérése számított XML-oszlopon keresztül. A ritka column_set tag oszlopai a column_set név alapján történő kiválasztásával érhetők el, és az xml column_set oszlopban való frissítésével beilleszthetők és frissíthetők.

Az értéknek meg kell felelnie column_set oszlopok sémájának.
A tábla összes oszlopának metaadatainak lekérése SQLColumnokon keresztül null vagy "%" (ODBC) oszlopkeresési mintával; vagy a DBSCHEMA_COLUMNS sémasorkészleten keresztül, oszlopkorlátozás nélkül (OLE DB). Egy sort ad vissza az összes olyan oszlophoz, amely nem tagja egy column_set. Ha a táblázat ritkán column_set, a rendszer egy sort ad vissza.

Vegye figyelembe, hogy ez nem ad vissza metaadatokat az olyan oszlopokhoz, amelyek egy column_settagjai.
Az összes oszlop metaadatainak lekérése az column_setritkaságától vagy tagságától függetlenül. Ez nagyon sok sort adhat vissza. A leíró mező SQL_SOPT_SS_NAME_SCOPE beállítása SQL_SS_NAME_SCOPE_EXTENDED és SQLColumns (ODBC) meghívására.

Az IDBSchemaRowset hívása::GetRowset a DBSCHEMA_COLUMNS_EXTENDED sémasorkészlethez (OLE DB).

Ez a forgatókönyv nem lehetséges olyan alkalmazásból, amely sql server natív ügyfelet használ az SQL Server 2008-nál korábbi kiadásból (10.0.x). Egy ilyen alkalmazás azonban közvetlenül lekérdezheti a rendszernézeteket.
Csak olyan oszlopok metaadatainak lekérése, amelyek egy column_settagjai. Ez nagyon sok sort adhat vissza. A leíró mező SQL_SOPT_SS_NAME_SCOPE beállítása az SQLColumns (ODBC) SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET és meghívására.

IdBSchemaRowset hívása::GetRowset a DBSCHEMA_SPARSE_COLUMN_SET sémasorkészlethez (OLE DB).

Ez a forgatókönyv nem lehetséges olyan alkalmazásból, amely sql server natív ügyfelet használ az SQL Server 2008-nál korábbi kiadásból (10.0.x). Egy ilyen alkalmazás azonban lekérdezheti a rendszernézeteket.
Határozza meg, hogy egy oszlop ritkábban van-e. Tekintse meg az SQLColumns eredményhalmaz (ODBC) SS_IS_SPARSE oszlopát.

Tekintse meg a DBSCHEMA_COLUMNS sémasorkészlet (OLE DB) SS_IS_SPARSE oszlopát.

Ez a forgatókönyv nem lehetséges olyan alkalmazásból, amely sql server natív ügyfelet használ az SQL Server 2008-nál korábbi kiadásból (10.0.x). Egy ilyen alkalmazás azonban lekérdezheti a rendszernézeteket.
Annak meghatározása, hogy egy oszlop column_set-e. Tekintse meg az SQLColumns eredményhalmaz SS_IS_COLUMN_SET oszlopát. Vagy tekintse meg az SQL Server-specifikus oszlopattribútumot SQL_CA_SS_IS_COLUMN_SET (ODBC).

Tekintse meg a DBSCHEMA_COLUMNS sémasorkészlet SS_IS_COLUMN_SET oszlopát. Vagy tekintse meg iColumnsinfo::GetColumnInfo vagy DBCOLUMNFLAGS által visszaadott dwFlags az IColumnsRowset::GetColumnsRowset által visszaadott sorhalmazban. column_set oszlopok esetében DBCOLUMNFLAGS_SS_ISCOLUMNSET lesz beállítva (OLE DB).

Ez a forgatókönyv nem lehetséges olyan alkalmazásból, amely sql server natív ügyfelet használ az SQL Server 2008-nál korábbi kiadásból (10.0.x). Egy ilyen alkalmazás azonban lekérdezheti a rendszernézeteket.
Ritka oszlopok importálása és exportálása BCP szerint egy column_setnélküli táblához. Az SQL Server natív ügyfél korábbi verzióinak viselkedése nem változik.
Ritka oszlopok importálása és exportálása BCP szerint egy column_setrendelkező táblához. A column_set az XML-hez hasonlóan importálja és exportálja; azaz a varbinary(max) , ha bináris típusként van megkötve, vagy nvarchar(max), ha karakter vagy wchar típusként van megkötve.

A ritka column_set tag oszlopai nem exportálhatók különálló oszlopokként; csak a column_setértékében exportálják őket.
lekérdezési viselkedését a BCP-hez. Az SQL Server natív ügyfél korábbi verzióiban nem változott a kifejezetten elnevezett oszlopok kezelése.

A különböző sémákkal rendelkező táblák közötti importálást és exportálást érintő forgatókönyvek speciális kezelést igényelhetnek.

A BCP-vel kapcsolatos további információkért lásd a témakör későbbi, ritkábban használt oszlopainak tömeges másolási (BCP) támogatását.

Down-Level ügyfél viselkedése

A alacsonyabb szintű ügyfelek csak olyan oszlopok metaadatait adnak vissza, amelyek nem tagjai az SQLColumns és DBSCHEMA_COLUMNS ritka column_set. Az SQL Server 2008 (10.0.x) natív ügyfélprogramban bevezetett további OLE DB-sémasorkészletek nem lesznek elérhetők, és az ODBC-ben az SQLColumns módosításai sem lesznek elérhetők SQL_SOPT_SS_NAME_SCOPE keresztül.

A alacsonyabb szintű ügyfelek név szerint hozzáférhetnek a ritka column_set tag oszlopaihoz, és a column_set oszlop XML-oszlopként lesz elérhető az SQL Server 2005 (9.x) ügyfelek számára.

Tömeges másolás (BCP) támogatása ritka ritkábban használt oszlopokhoz

A BCP API nem változik sem az ODBC-ben, sem az OLE DB-ben a ritka oszlopokhoz vagy column_set funkciókhoz.

Ha egy tábla column_settartalmaz, a rendszer nem különálló oszlopként kezeli a ritka oszlopokat. Az összes ritka oszlop értéke szerepel a column_setértékében, amelyet az XML-oszlopéval megegyező módon exportálnak; azaz a varbinary(max), ha bináris típusként van megkötve, vagy nvarchar(max), ha karakter vagy wchar típusként van megkötve). Importáláskor a column_set értéknek meg kell felelnie a column_setsémájának.

lekérdezési műveletek esetében nincs változás a kifejezetten hivatkozott oszlopok kezelésének módjában. column_set oszlopok működése megegyezik az XML-oszlopokéval, és a ritkaságnak nincs hatása a nevesített ritka oszlopok kezelésére.

Ha azonban lekérdezési használ az exportáláshoz, és a név szerint beállított ritka oszlop tagjaira hivatkozik, akkor nem hajthat végre közvetlen importálást egy hasonló strukturált táblába. Ennek az az oka, hogy a BCP egy * művelettel konzisztens metaadatokat használ az importáláshoz, és nem tudja egyeztetni column_set tagoszlopokat ezzel a metaadatokkal. Ha egyenként szeretné importálni column_set tagoszlopokat, meg kell adnia egy nézetet a táblában, amely a kívánt column_set oszlopokra hivatkozik, és az importálási műveletet a nézet használatával kell végrehajtania.

Lásd még:

SQL Server natív ügyfélprogramozási