Sdílet prostřednictvím


Provádění operací hromadného kopírování

Platí na:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformový systém (PDW)SQL databáze v Microsoft Fabric

Stáhnout ovladač OLE DB

Funkce hromadné kopírování SQL Serveru podporuje přenos velkého množství dat do nebo z tabulky nebo zobrazení SQL Serveru. Data lze také přenést zadáním příkazu SELECT. Data lze přesouvat mezi SQL Serverem a datovým souborem operačního systému, například ASCII souborem. Datový soubor může mít různé formáty; formát je definován tak, aby hromadně kopíroval soubor ve formátu. Volitelně lze data načíst do programových proměnných a přenést na SQL Server pomocí funkcí hromadného kopírovaní a metod.

Pro ukázkovou aplikaci, která tuto funkci demonstruje, viz Hromadné kopírovaní dat pomocí IRowsetFastLoad (OLE DB).

Aplikace obvykle používá hromadné kopírování jedním z následujících způsobů:

  • Hromadné zkopírování z tabulky, pohledu nebo sady výsledků Transact-SQL příkazu do datového souboru, kde jsou data uložena ve stejném formátu jako tabulka nebo zobrazení.

    Tomu se říká nativní datový soubor.

  • Hromadné zkopírování z tabulky, pohledu nebo sady výsledků Transact-SQL příkazu do datového souboru, kde jsou data uložena v jiném formátu než v tabulce nebo pohledu.

    V tomto případě je vytvořen samostatný formátový soubor, který definuje charakteristiky (datový typ, polohu, délku, terminátor atd.) každého sloupce tak, jak je uložen v datovém souboru. Pokud jsou všechny sloupce převedeny do znakového formátu, výsledný soubor se nazývá datový soubor s režimem znaků.

  • Hromadně kopírujte z datového souboru do tabulky nebo pohledu.

    Pokud je potřeba, používá se formátový soubor k určení rozložení datového souboru.

  • Načíst data do programových proměnných a poté je importovat do tabulky nebo zobrazení pomocí funkcí hromadného kopírovaní pro hromadné kopírování po řadách.

Datové soubory používané hromadnými kopírovacími funkcemi nemusí být vytvářeny jiným hromadným kopírovacím programem. Jakýkoli jiný systém může generovat datový soubor a formátovat soubor podle definic hromadné kopie; tyto soubory lze pak použít pomocí hromadného kopírovacího programu SQL Server k importu dat do SQL Serveru. Například můžete exportovat data z tabulky do souboru odděleného tabulátorem, vytvořit formátový soubor popisující soubor oddělený tabulátory a pak použít program na hromadnou kopíraci k rychlému importu dat do SQL Serveru. Datové soubory generované hromadnou kopírací lze také importovat do jiných aplikací. Například můžete použít hromadné kopírovací funkce k exportu dat z tabulky nebo pohledu do souboru odděleného tabulátorem, který pak načtete do tabulky.

Programátoři, kteří programují aplikace pro hromadné kopírování, by měli dodržovat obecná pravidla pro dobrý výkon hromadného kopírování. Pro více informací o podpoře hromadných kopírovacích operací v SQL Serveru viz Hromadný import a export dat (SQL Server).

Omezení a restrikce

CLR uživatelsky definovaný typ (UDT) musí být vázán jako binární data. I když formátovaný soubor specifikuje SQLCHAR jako datový typ pro cílový sloupec UDT, nástroj BCP bude data považovat za binární.

Nepoužívejte NASTAVIT FMTONLY OFF při hromadných kopírovacích operacích. VYPNOUT FMTONLY může způsobit selhání hromadné kopírování nebo neočekávané výsledky.

Ovladač OLE DB pro SQL Server

OLE DB Driver pro SQL Server implementuje dvě metody pro hromadné kopírovací operace s databází SQL Serveru. První metoda zahrnuje použití rozhraní IRowsetFastLoad pro hromadné kopírování založené na paměti; a druhá zahrnuje použití rozhraní IBCPSession pro hromadné kopírovací operace založené na souborech.

Použití hromadných kopírovacích operací založených na paměti

Ovladač OLE DB pro SQL Server implementuje rozhraní IRowsetFastLoad pro podporu hromadných kopírovacích operací založených na paměti SQL Serveru. Rozhraní IRowsetFastLoad implementuje metody IRowsetFastLoad::Commit a IRowsetFastLoad::InsertRow .

Povolení relace pro IRowsetFastLoad

Spotřebitel informuje OLE DB Driver pro SQL Server o potřebě hromadné kopie tím, že nastaví vlastnost OLE DB Driver pro SQL Server specifický zdroj dat SSPROP_ENABLEFASTLOAD na VARIANT_TRUE. S vlastností nastavenou na datovém zdroji uživatel vytvoří OLE DB ovladač pro SQL Server relaci. Nová relace umožňuje spotřebitelům přístup k rozhraní IRowsetFastLoad .

Poznámka:

Pokud je pro inicializaci datového zdroje použito rozhraní IDataInitialize , je nutné nastavit vlastnost SSPROP_IRowsetFastLoad v parametru rgPropertySets metody IOpenRowset::OpenRowset ; jinak volání metody OpenRowset vrátí E_NOINTERFACE.

Povolení relace pro hromadné kopírování omezuje podporu OLE DB ovladače pro SQL Server pro rozhraní v relaci. Relace s povoleným hromadným kopírováním zpřístupňuje pouze následující rozhraní:

  • IDBSchemaRowset

  • IGetDataSource

  • IOpenRowset

  • ISupportErrorInfo

  • ITransactionJoin

Pro zakázání vytváření hromadných řádků s povoleným kopírováním a pro vrácení OLE DB Driver pro SQL Server relaci ke standardnímu zpracování, resetujte SSPROP_ENABLEFASTLOAD na VARIANT_FALSE.

IRowsetFastLoad řádkové sady

Ovladač OLE DB pro hromadné kopie řádků SQL Serveru je pouze pro zápis, ale umožňuje uživateli určit strukturu tabulky SQL Server. Následující rozhraní jsou dostupná na hromadném kopiování OLE DB ovladače pro SQL Server rowset:

  • IAcccessor

  • IColumnsInfo

  • IColumnsRowset

  • IConvertType

  • IRowsetFastLoad

  • IRowsetInfo

  • ISupportErrorInfo

Vlastnosti specifické pro poskytovatele SSPROP_FASTLOADOPTIONS, SSPROP_FASTLOADKEEPNULLS a SSPROP_FASTLOADKEEPIDENTITY řízení OLE DB ovladače pro SQL Server hromadné kopírovaní řádků. Vlastnosti jsou specifikovány v členu rgProperties člena parametru rgPropertySetsIOpenRowset .

ID vlastnosti Description
SSPROP_FASTLOADKEEPIDENTITY Sloupek: Ne

R/W: Čtení/zápis

Typ: VT_BOOL

Výchozí: VARIANT_FALSE

Popis: Udržuje hodnoty identity dodané spotřebitelem.

VARIANT_FALSE: Hodnoty pro sloupec identity v tabulce SQL Server jsou generovány SQL Serverem. Jakákoli hodnota omezená pro sloupec je ignorována ovladačem OLE DB pro SQL Server.

VARIANT_TRUE: Spotřebitel naváže přístupový modul a poskytne hodnotu pro sloupec identity SQL Serveru. Vlastnost identity není dostupná ve sloupcích přijímajících NULL, takže spotřebitel poskytuje unikátní hodnotu na každém IRowsetFastLoad::Insert call.
SSPROP_FASTLOADKEEPNULLS Sloupek: Ne

R/W: Čtení/zápis

Typ: VT_BOOL

Výchozí: VARIANT_FALSE

Popis: Udržuje NULL pro sloupce s VÝCHOZÍM omezením. Týká se pouze sloupců SQL Serveru, které přijímají NULL a mají nastavené VÝCHOZÍ omezení.

VARIANT_FALSE: SQL Server vloží výchozí hodnotu sloupce, když uživatel OLE DB Driver for SQL Server vloží řádek obsahující NULL pro sloupec.

VARIANT_TRUE: SQL Server vloží NULL pro hodnotu sloupce, když uživatel OLE DB Driver for SQL Server vloží řádek obsahující NULL pro sloupec.
SSPROP_FASTLOADOPTIONS Sloupek: Ne

R/W: Čtení/zápis

Typ: VT_BSTR

Výchozí: žádný

Popis: Tato vlastnost je stejná jako - h "nápověda[,... n]" Možnost služby BCP . Následující řetězce lze použít jako možnosti při hromadném kopírování dat do tabulky.

ORDER(column[ASC | DESC][,... n]): Pořadí třídění dat v datovém souboru. Výkon hromadného kopírování se zlepší, pokud je načítaný datový soubor seřazen podle shlukového indexu v tabulce.

ROWS_PER_BATCH = bb: Počet řádků dat v dávce (jako bb). Server optimalizuje hromadné zatížení podle hodnoty bb. Výchozí ROWS_PER_BATCH není známo.

KILOBYTES_PER_BATCH = cc: Počet kilobajtů (KB) dat na dávku (jako cc). Výchozí KILOBYTES_PER_BATCH není známo.

TABLOCK: Na dobu hromadné kopírovací operace je získán zámek na úrovni tabulky. Tato možnost výrazně zlepšuje výkon, protože držení zámku pouze po celou dobu hromadné kopírovací operace snižuje spor o zámek na stole. Tabulku může načíst více klientů současně, pokud tabulka nemá žádné indexy a je specifikován TABLOCK . Výchozí nastavení je uzamčení určeno zámkem tabulky voleb při hromadném zatížení.

CHECK_CONSTRAINTS: Všechna omezení na table_name jsou kontrolována během hromadné kopie. Ve výchozím nastavení jsou omezení ignorována.

FIRE_TRIGGER: SQL Server používá verzování řádků pro triggery a ukládá verze řádků do úložiště verzí v tempdb. Proto jsou optimalizace hromadného logování dostupné i při zapnutí spouštěčů. Před hromadným importem dávky s velkým počtem řádků s povolenými triggery možná budete muset zvětšit velikost tempdb.

Použití hromadných kopírovacích operací založených na souborech

Ovladač OLE DB pro SQL Server implementuje rozhraní IBCPSession , aby zpřístupnil podporu hromadného kopírování souborů SQL Server. Rozhraní IBCPSession implementuje metody IBCPSession::BCPColFmt, IBCPSession::BCPColumns, IBCPSession::BCPControl, IBCPSession::BCPDone, IBCPSession::BCPExec, IBCPSession::BCPReadFmt a IBCPSession::BCPWriteFmt metody.

Viz také

OLE DB Driver for SQL Server Features
Vlastnosti zdroje dat (OLE DB)
hromadný import a export dat (SQL Server)
IRowsetFastLoad (OLE DB)
IBCPSession (OLE DB)