Share via


Bulkkopiebewerkingen uitvoeren

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform Systeem (PDW)SQL-database in Microsoft Fabric

OLE DB-stuurprogramma downloaden

De SQL Server bulk copy-functie ondersteunt het overbrengen van grote hoeveelheden data in of uit een SQL Server-tabel of -weergave. Data kan ook worden overgedragen door een SELECT-instructie te specificeren. De gegevens kunnen worden verplaatst tussen SQL Server en een besturingssysteem-databestand, zoals een ASCII-bestand. Het databestand kan verschillende formaten hebben; Het formaat is gedefinieerd om in bulk te kopiëren in een bestandsbestand. Optioneel kunnen gegevens worden geladen in programmavariabelen en worden overgezet naar SQL Server met behulp van bulkkopieerfuncties en -methoden.

Voor een voorbeeldapplicatie die deze functie demonstreert, zie Bulk Copy Data Using IRowsetFastLoad (OLE DB).

Een applicatie gebruikt doorgaans bulkkopieën op een van de volgende manieren:

  • Bulk kopiëren van een tabel, weergave of de resultaatset van een Transact-SQL-instructie naar een databestand waarin de data in hetzelfde formaat wordt opgeslagen als de tabel of weergave.

    Dit wordt een native-mode databestand genoemd.

  • Bulk kopiëren van een tabel, weergave of de resultaatset van een Transact-SQL-statement naar een databestand waarin de data in een ander formaat dan dat van de tabel of weergave wordt opgeslagen.

    In dit geval wordt een apart formaat gemaakt dat de kenmerken (datatype, positie, lengte, terminator, enzovoort) van elke kolom definieert zoals deze in het databestand wordt opgeslagen. Als alle kolommen zijn omgezet naar tekenformaat, wordt het resulterende bestand een character-mode databestand genoemd.

  • Bulk kopiëren van een databestand naar een tabel of weergave.

    Indien nodig wordt een formaatbestand gebruikt om de lay-out van het databestand te bepalen.

  • Laad data in programmavariabelen en importeer de gegevens vervolgens in een tabel of weergave met behulp van de bulkkopieerfuncties voor bulkkopiëren achter elkaar.

Databestanden die door bulkkopieerfuncties worden gebruikt, hoeven niet door een ander bulkkopieerprogramma te worden aangemaakt. Elk ander systeem kan een databestand genereren en een bestand formatteren volgens bulkkopiedefinities; deze bestanden kunnen vervolgens worden gebruikt met een SQL Server-bulkkopieerprogramma om gegevens in SQL Server te importeren. Je zou bijvoorbeeld data uit een spreadsheet kunnen exporteren in een tab-gescheiden bestand, een formaat maken dat het tab-gescheiden bestand beschrijft, en vervolgens een bulk-kopieerprogramma gebruiken om de data snel te importeren in SQL Server. Databestanden die door bulkkopieën worden gegenereerd, kunnen ook worden geïmporteerd in andere applicaties. Je zou bijvoorbeeld bulk-kopieerfuncties kunnen gebruiken om data uit een tabel te exporteren of te bekijken naar een tab-gescheiden bestand dat vervolgens in een spreadsheet geladen kan worden.

Programmeurs die applicaties coderen om bulk-kopieerfuncties te gebruiken, moeten de algemene regels volgen voor goede bulk-kopieerprestaties. Voor meer informatie over ondersteuning voor bulkkopieeroperaties in SQL Server, zie Bulk Import and Export of Data (SQL Server).

Beperkingen en beperkingen

Een CLR-door de gebruiker gedefinieerd type (UDT) moet worden gebonden als binaire gegevens. Zelfs als een formateerbestand SQLCHAR als datatype voor een doel-UDT-kolom specificeert, zal het BCP-programma de data als binair behandelen.

Gebruik SET FMTONLY OFF niet met bulk-kopieerbewerkingen. SET FMTONLY OFF kan ervoor zorgen dat je bulk-kopieeroperatie faalt of onverwachte resultaten geeft.

OLE DB-stuurprogramma voor SQL Server

De OLE DB Driver voor SQL Server implementeert twee methoden voor het uitvoeren van bulkkopiebewerkingen met een SQL Server-database. De eerste methode maakt gebruik van de IRowsetFastLoad-interface voor geheugengebaseerde bulkkopiebewerkingen; en de tweede omvat het gebruik van de IBCPSession-interface voor bestandsgebaseerde bulkkopie-operaties.

Gebruik van geheugengebaseerde bulkkopiebewerkingen

De OLE DB Driver voor SQL Server implementeert de IRowsetFastLoad-interface om ondersteuning te bieden voor SQL Server-geheugengebaseerde bulkkopieeroperaties. De IRowsetFastLoad-interface implementeert de methoden IRowsetFastLoad::Commit en IRowsetFastLoad::InsertRow .

Een sessie inschakelen voor IRowsetFastLoad

De consument informeert de OLE DB-driver voor SQL Server over de noodzaak van bulkkopie door de OLE DB Driver for SQL Server-specifieke databroneigenschap SSPROP_ENABLEFASTLOAD op VARIANT_TRUE in te stellen. Met de eigenschap ingesteld op de databron maakt de consument een OLE DB-driver aan voor de SQL Server-sessie. De nieuwe sessie biedt consumenten toegang tot de IRowsetFastLoad-interface .

Opmerking

Als de IDataInitialize-interface wordt gebruikt voor het initialiseren van de databron, is het noodzakelijk om de eigenschap SSPROP_IRowsetFastLoad in de rgPropertySets-parameter van de IOpenRowset::OpenRowset-methode in te stellen; anders zal de aanroep naar de OpenRowset-methode E_NOINTERFACE teruggeven.

Het inschakelen van een sessie voor bulkkopiëren beperkt de OLE DB-driver voor SQL Server-ondersteuning voor interfaces op de sessie. Een sessie met bulk copy-enabled maakt alleen de volgende interfaces bloot:

  • IDBSchemaRowset

  • IGetDataSource

  • IOpenRowset

  • ISupportErrorInfo

  • ITransactionJoin

Om het aanmaken van bulk-copy-enabled rowsets uit te schakelen en de OLE DB Driver for SQL Server-sessie terug te laten keren naar standaardverwerking, reset SSPROP_ENABLEFASTLOAD naar VARIANT_FALSE.

IRowsetFastLoad rijsets

De OLE DB-driver voor SQL Server-bulkkopie-rijsets zijn schrijfalleen, maar bieden interfaces waarmee de consument de structuur van een SQL Server-tabel kan bepalen. De volgende interfaces worden blootgesteld op een bulk-copy-enabled OLE DB Driver for SQL Server-rijset:

  • IAccessor

  • IColumnsInfo

  • IColumnsRowset

  • IConvertType

  • IRowsetFastLoad

  • IRowsetInfo

  • ISupportErrorInfo

De provider-specifieke eigenschappen SSPROP_FASTLOADOPTIONS, SSPROP_FASTLOADKEEPNULLS en SSPROP_FASTLOADKEEPIDENTITY het gedrag van een OLE DB-driver voor SQL Server bulk-copy rowset. De eigenschappen worden gespecificeerd in het rgProperties-lid van een rgPropertySetsIOpenRowset-parameterlid .

Eigenschaps-id Description
SSPROP_FASTLOADKEEPIDENTITY Column: Nee

R/W: Lezen/schrijven

Type: VT_BOOL

Standaard: VARIANT_FALSE

Beschrijving: Onderhoudt identiteitswaarden die door de consument worden geleverd.

VARIANT_FALSE: Waarden voor een identiteitskolom in de SQL Server-tabel worden gegenereerd door SQL Server. Elke waarde die voor de kolom is begrensd, wordt genegeerd door de OLE DB Driver voor SQL Server.

VARIANT_TRUE: De consument bindt een accessor die een waarde levert voor een SQL Server-identiteitskolom. De identiteitseigenschap is niet beschikbaar op kolommen die NULL accepteren, dus de consument geeft een unieke waarde op elke IRowsetFastLoad::Insert call.
SSPROP_FASTLOADKEEPNULLS Column: Nee

R/W: Lezen/schrijven

Type: VT_BOOL

Standaard: VARIANT_FALSE

Beschrijving: Onderhoudt NULL voor kolommen met een DEFAULT-beperking. Treft alleen SQL Server-kolommen die NULL accepteren en een DEFAULT-constraint hebben toegepast.

VARIANT_FALSE: SQL Server voegt de standaardwaarde voor de kolom in wanneer de OLE DB Driver voor SQL Server-consument een rij met NULL voor de kolom invoegt.

VARIANT_TRUE: SQL Server voegt NULL in voor de kolomwaarde wanneer de OLE DB Driver voor SQL Server-consument een rij met NULL voor de kolom invoegt.
SSPROP_FASTLOADOPTIONS Column: Nee

R/W: Lezen/schrijven

Type: VT_BSTR

Standaard: geen

Beschrijving: Deze eigenschap is hetzelfde als de -h "hint,...[ n]" Optie van de BCP-hulp . De volgende string(s) kunnen worden gebruikt als optie bij het bulkkopiëren van gegevens naar een tabel.

ORDER(kolom[ASC | DESC][,... n]): Sorteervolgorde van gegevens in het databestand. De bulk-kopieerprestaties worden verbeterd als het te laden databestand wordt gesorteerd volgens de geclusterde index in de tabel.

ROWS_PER_BATCH = BB: Aantal rijen data per batch (als BB). De server optimaliseert de bulkbelasting volgens de waarde bb. Standaard is ROWS_PER_BATCH onbekend.

KILOBYTES_PER_BATCH = cc: Aantal kilobytes (KB) data per batch (als cc). Standaard is KILOBYTES_PER_BATCH onbekend.

TABLOCK: Een tabelniveau-lock wordt verkregen voor de duur van de bulk-kopieeroperatie. Deze optie verbetert de prestaties aanzienlijk omdat het behouden van een lock alleen voor de duur van de bulk-copy operatie de lock-contention op tafel vermindert. Een tabel kan door meerdere clients gelijktijdig worden geladen als de tabel geen indexen heeft en TABLOCK is gespecificeerd. Standaard wordt het vergrendelingsgedrag bepaald door de tabeloptie table lock bij bulkbelasting.

CHECK_CONSTRAINTS: Alle beperkingen op table_name worden gecontroleerd tijdens de bulk-kopieeroperatie. Standaard worden beperkingen genegeerd.

FIRE_TRIGGER: SQL Server gebruikt rijversiebeheer voor triggers en slaat de rijversies op in de versieopslag in tempDB. Daarom zijn bulk logging optimalisaties beschikbaar, zelfs wanneer triggers zijn ingeschakeld. Voordat je een batch bulk-importeert met een groot aantal rijen en triggers ingeschakeld, moet je mogelijk de grootte van tempdb vergroten.

Gebruik van bestandsgebaseerde bulkkopie-operaties

De OLE DB Driver voor SQL Server implementeert de IBCPSession-interface om ondersteuning te bieden voor SQL Server-bestandsgebaseerde bulkkopie-operaties. De IBCPSession-interface implementeert de IBCPSession::BCPColFmt, IBCPSession::BCPColumns, IBCPSession::BCPControl, IBCPSession::BCPDone, IBCPSession::BCPExec, IBCPSession::BCPInit, IBCPSession::BCPReadFmt, en IBCPSession::BCPWriteFmt .

Zie ook

OLE DB-driver voor SQL Server-functies
Eigenschappen van de gegevensbron (OLE DB)
bulksgewijs importeren en exporteren van gegevens (SQL Server)
IRowsetFastLoad (OLE DB)
IBCPSession (OLE DB)