Megosztás a következőn keresztül:


Tömeges másolási műveletek végrehajtása

Vonatkozik a következőkre:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitikai Platform System (PDW)SQL adatbázis a Microsoft Fabric-ben

OLE DB-illesztő letöltése

Az SQL Server tömeges másolási funkciója támogatja nagy mennyiségű adatátvitelt egy SQL Server táblába vagy nézetéből. Az adatokat továbbítani lehet egy SELECT utasítás megjelölésével is. Az adatok áthelyezhetők az SQL Server és egy operációs rendszer adatfájlja, például egy ASCII fájl között. Az adatfájl különböző formátumú lehet; a formátum úgy van definiálva, hogy tömegesen másolja be egy formátumfájlba. Opcionálisan az adatok programváltozókba is betölthetik, majd tömeges másolási függvényekkel és módszerekkel áthelyezhetők SQL Serverbe.

Egy ilyen funkciót bemutató mintaalkalmazásért lásd: Bulk Copy Data Using IRowsetFastLoad (OLE DB).

Egy alkalmazás általában a következő módok egyikén használja a tömeges másolatot:

  • Tömeges másolás egy táblapból, nézetből vagy egy Transact-SQL utasítás eredményhalmazából egy adatfájlba, ahol az adatok ugyanabban a formátumban tárolják, mint a tábla vagy nézet.

    Ezt natív módú adatfájlnak nevezik.

  • Tömeges másolás egy táblapból, nézetből vagy egy Transact-SQL utasítás eredményhalmazából egy adatfájlba, ahol az adatok más formátumban tárolódnak, nem a táblázat vagy a nézet formátumán.

    Ebben az esetben külön formátumfájlt hoznak létre, amely meghatározza az egyes oszlopok jellemzőit (adattípus, pozíció, hossz, terminátor stb.) úgy, ahogy az adatfájlban tároljuk. Ha az összes oszlopot karakterformátumra konvertáljuk, az eredményt karaktermódú adatfájlnak nevezzük.

  • Tömeges másolás egy adatfájlból egy táblába vagy nézetbe.

    Szükség esetén egy formátumfájl segítségével határozzák meg az adatfájl elrendezését.

  • Töltsd be az adatokat programváltozókba, majd importáld az adatokat egy táblába vagy nézetbe a tömeges másolási függvényekkel soronkénti tömeges másoláshoz.

A tömeges másolási függvények által használt adatfájlokat nem kell más tömeges másoló programnak létrehozniuk. Bármely más rendszer képes adatfájlt generálni és fájlt formázni a tömeges másolási definíciók szerint; ezeket a fájlokat aztán SQL Server tömeges másolóprogramjával lehet használni, hogy adatokat importáljanak az SQL Serverbe. Például exportálhatsz adatokat egy táblázatból egy tab-departiált fájlba, létrehozhatsz egy formátumfájlt, amely leírja a tab-departiált fájlt, majd egy tömeges másolási programot használsz, hogy gyorsan importáld az adatokat az SQL Serverbe. A tömeges másolással generált adatfájlok más alkalmazásokba is importálhatók. Például tömeges másolási függvényekkel exportálhatsz adatokat egy táblából vagy nézetből egy tab-departiált fájlba, amelyet aztán betölthetsz egy táblázatba.

Azoknak a programozóknak kell követniük az általános szabályokat a tömeges másolási funkciók használatához. További információért az SQL Server tömeges másolási műveleteinek támogatásáról lásd: Adat tömeges importálása és exportálása (SQL Server).

Korlátozások és korlátozások

A CLR felhasználó által definiált típust (UDT) bináris adatként kell korlátozni. Még ha egy formátumfájl az SQLCHAR-t jelöli meg is egy cél UDT oszlop adattípusaként, a BCP segédprogram binárisként kezeli az adatokat.

Ne használd a SET FMTONLY OFF funkciót tömeges másolási műveletekhez. A FMTONLY KIKAPCSOLÁSA okozhatja a tömeges másolási műveletet vagy váratlan eredményeket hozhat.

OLE DB-illesztő az SQL Serverhez

Az OLE DB Driver for SQL Server két módszert valósít meg tömeges másolási műveletek végrehajtására SQL Server adatbázissal. Az első módszer az IRowsetFastLoad interfész használatát jelenti memóriaalapú tömeges másolási műveletekhez; a második pedig az IBCPSession interfész használatát a fájlalapú tömeges másolási műveletekhez.

Memóriaalapú tömeges másolási műveletek használata

Az OLE DB Driver for SQL Server az IRowsetFastLoad interfészt valósítja meg, hogy támogassa az SQL Server memóriaalapú tömeges másolási műveleteket. Az IRowsetFastLoad interfés az IRowsetFastLoad::Commit és IRowsetFastLoad::InsertRow metódusokat valósítja meg.

Session-i engedélyezés IRowsetFastLoad számára

A fogyasztó értesíti az SQL Server OLE DB Driver-ét a tömeges másolás szükségességéről, amikor az OLE DB Driver for SQL Server-specifikus adatforrás tulajdonságát SSPROP_ENABLEFASTLOAD VARIANT_TRUE-re állítja. Ha a tulajdonság az adatforráson van beállítva, a fogyasztó létrehoz egy OLE DB meghajtót SQL Server üléshez. Az új munkafolyamat lehetővé teszi a fogyasztók számára az IRowsetFastLoad interfészhez való hozzáférést.

Megjegyzés:

Ha az IDataInitialize interfészt használják az adatforrás inicializálásához, akkor szükséges beállítani a SSPROP_IRowsetFastLoad tulajdonságot az IOpenRowset::OpenRowsetmetódus rgPropertySets paraméterében; különben az OpenRowset metódus hívása E_NOINTERFACE visszaad.

A nagy mennyiségű másolás engedélyezése korlátozza az OLE DB Driver for SQL Server támogatását az interfészek számára az ülésen. Egy tömeges másolási engedélyezett session csak a következő interfészeket tárja ki:

  • IDBSchemaRowset

  • IGetDataSource

  • IOpenRowset

  • ISupportErrorInfo

  • ITransactionJoin

A tömeges másolási engedélyezett sorhalmazok létrehozásának letiltásához és ahhoz, hogy az SQL Server OLE DB Driver visszatérjen a szabványos feldolgozáshoz, állítsd vissza SSPROP_ENABLEFASTLOAD VARIANT_FALSE-re.

IRowsetFastLoad sorkészletek

Az SQL Server tömeges másolási sorhalmazokhoz készült OLE DB illeződriver csak írásra alkalmas, de olyan interfészeket kínálnak, amelyek lehetővé teszik a fogyasztó számára, hogy meghatározza az SQL Server tábla szerkezetét. A következő interfészek elérhetők egy tömeges másolatos OLE DB Driver for SQL Server sorkészleten:

  • IAccessor

  • IColumnsInfo

  • IColumnsRowset

  • IConvertType

  • IRowsetFastLoad

  • IRowsetInfo

  • ISupportErrorInfo

A szolgáltató-specifikus tulajdonságok SSPROP_FASTLOADOPTIONS, SSPROP_FASTLOADKEEPNULLS és SSPROP_FASTLOADKEEPIDENTITY vezérlési viselkedéseket tartalmazzák az SQL Server OLE DB illesztőgépének tömeges sorkészletével. A tulajdonságok az rgPropertySetsIOpenRowset paramétertag rgProperties tagjában vannak megadva.

Tulajdonságazonosító Description
SSPROP_FASTLOADKEEPIDENTITY Oszlop: Nem

R/W: Olvasás/írás

Típus: VT_BOOL

Alapértelmezés: VARIANT_FALSE

Leírás: Fenntartja a fogyasztó által szolgáltatott identitásértékeket.

VARIANT_FALSE: Az SQL Server táblájának identitásoszlopának értékeit az SQL Server generálja. Az oszlophoz tartozó értékhatárokat az OLE DB Driver az SQL Server számára figyelmen kívül hagyja.

VARIANT_TRUE: A fogyasztó egy hozzáférést köt hozzá, ami értéket biztosít egy SQL Server identitásoszlophoz. Az identitás tulajdonsága nem érhető el azokon az oszlopokban, amelyek elfogadják a NULL-t, így a fogyasztó egyedi értéket ad minden IRowsetFastLoad::Insert hívásra.
SSPROP_FASTLOADKEEPNULLS Oszlop: Nem

R/W: Olvasás/írás

Típus: VT_BOOL

Alapértelmezés: VARIANT_FALSE

Leírás: NULL értéket tart az alapértelmezett korlátozással rendelkező oszlopok számára. Csak azokat az SQL Server oszlopokat érinti, amelyek elfogadják a NULL-t, és ALAPÉRTELMEZETT korlátozást alkalmaznak.

VARIANT_FALSE: Az SQL Server akkor helyezi be az oszlop alapértelmezett értékét, amikor az OLE DB Driver for SQL Server felhasználó egy NULL sort illeszt be az oszlophoz.

VARIANT_TRUE: Az SQL Server NULL-t helyez be az oszlopértékhez, amikor az OLE DB Driver for SQL Server fogyasztó egy NULL-t tartalmazó sort illeszt be az oszlophoz.
SSPROP_FASTLOADOPTIONS Oszlop: Nem

R/W: Olvasás/írás

Típus: VT_BSTR

Alapértelmezett: nincs

Leírás: Ez a tulajdonság ugyanaz, mint a -h "hint[,... n]" a BCP segédeszköz opciója. A következő string(ek) opcióként használhatók az adatok tömeges másolásában egy táblába.

ORDER(column[ASC | DESC][,... n]): Az adatok sorrendje az adatfájlban. A tömeges másolási teljesítmény javul, ha a betöltött adatfájlt a táblázaton lévő klaszterezett index szerint rendezik.

ROWS_PER_BATCH = bb: Adatsorok száma egy tételenként ( bb-ként). A szerver optimalizálja a tömegterhelést a bb érték alapján. Alapértelmezés szerint ROWS_PER_BATCH ismeretlen.

KILOBYTES_PER_BATCH = cc: Kilobájt (KB) adat tételenként (cc formájában). Alapértelmezés szerint KILOBYTES_PER_BATCH ismeretlen.

TABLOCK: Asztalszintű zárat szereznek a tömeges másolat művelet időtartamára. Ez az opció jelentősen javítja a teljesítményt, mivel a zár csak a tömeges másolás időtartama alatt csökkenti a zár konfliktust az asztalon. Egy táblát több kliens egyszerre tölthet be, ha nincs index, és TABLOCK van megadva. Alapértelmezés szerint a zárolási viselkedést a táblaopció tábla zárolása határozza meg tömeges terhelésnél.

CHECK_CONSTRAINTS: A table_name korlátozásait a tömeges másolás során ellenőrzik. Alapértelmezés szerint a korlátozásokat figyelmen kívül hagyjuk.

FIRE_TRIGGER: Az SQL Server sorverziózást használ triggerekhez, és a sorverziókat a tempdb-ben tárolja a verzió tárolójában. Ezért a tömeges naplóoptimalizálás akkor is elérhető, ha a triggerek engedélyezve vannak. Mielőtt nagy mennyiségű sorral rendelkező adag importálása előtt triggerek engedélyezve vannak, lehet, hogy bővítened kell a tempdb méretét.

Fájlalapú tömeges másolási műveletek használata

Az OLE DB Driver for SQL Server az IBCPSession interfészt valósítja meg, hogy támogassa az SQL Server fájlalapú tömeges másolási műveleteket. Az IBCPSession interfész az IBCPSession::BCPColFmt, IBCPSession::BCPColumns, IBCPSession::BCPControl, IBCPSession::BCPDone, IBCPSession::BCPExec, IBCPSession::BCPInit, IBCPSession::BCPReadFmt és IBCPSession::BCPWriteFmt módszereket valósít meg.

Lásd még:

OLE DB Driver for SQL Server Features
Adatforrás tulajdonságok (OLE DB)
adatok tömeges importálása és exportálása (SQL Server)
IRowsetFastLoad (OLE DB)
IBCPSession (OLE DB)