Delen via


Bulkkopiebewerkingen uitvoeren in sql Server Native Client

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Belangrijk

SQL Server Native Client (SNAC) wordt niet geleverd met:

  • SQL Server 2022 (16.x) en latere versies
  • SQL Server Management Studio 19 en latere versies

De SQL Server Native Client (SQLNCLI of SQLNCLI11) en de verouderde Microsoft OLE DB-provider voor SQL Server (SQLOLEDB) worden niet aanbevolen voor de ontwikkeling van nieuwe toepassingen.

Gebruik een van de volgende stuurprogramma's voor nieuwe projecten:

Voor SQLNCLI die als onderdeel van SQL Server Database Engine (versies 2012 tot en met 2019) wordt geleverd, raadpleegt u deze uitzondering voor de levenscyclus van ondersteuning.

De functie voor bulksgewijs kopiëren van SQL Server ondersteunt de overdracht van grote hoeveelheden gegevens naar of uit een SQL Server-tabel of -weergave. Gegevens kunnen ook worden overgedragen door een SELECT-instructie op te geven. De gegevens kunnen worden verplaatst tussen SQL Server en een gegevensbestand van het besturingssysteem, zoals een ASCII-bestand. Het gegevensbestand kan verschillende indelingen hebben; de indeling is gedefinieerd om bulksgewijs te kopiëren in een indelingsbestand. Optioneel kunnen gegevens worden geladen in programmavariabelen en worden overgedragen naar SQL Server met behulp van functies en methoden voor bulksgewijs kopiëren.

Zie Bulk Copy Data Using IRowsetFastLoad (OLE DB) voor een voorbeeldtoepassing die deze functie demonstreert.

Een toepassing gebruikt doorgaans bulksgewijs kopiëren op een van de volgende manieren:

  • Bulksgewijs kopiëren vanuit een tabel, weergave of de resultatenset van een Transact-SQL instructie in een gegevensbestand waarin de gegevens zijn opgeslagen in dezelfde indeling als de tabel of weergave.

    Dit wordt een systeemeigen gegevensbestand genoemd.

  • Bulksgewijs kopiëren vanuit een tabel, weergave of de resultatenset van een Transact-SQL instructie in een gegevensbestand waarin de gegevens zijn opgeslagen in een andere indeling dan de tabel of weergave.

    In dit geval wordt een afzonderlijk indelingsbestand gemaakt dat de kenmerken (gegevenstype, positie, lengte, afsluiter, enzovoort) van elke kolom definieert zoals deze wordt opgeslagen in het gegevensbestand. Als alle kolommen worden geconverteerd naar tekenindeling, wordt het resulterende bestand een gegevensbestand in de tekenmodus genoemd.

  • Bulksgewijs kopiëren van een gegevensbestand naar een tabel of weergave.

    Indien nodig wordt een indelingsbestand gebruikt om de indeling van het gegevensbestand te bepalen.

  • Laad gegevens in programmavariabelen en importeer de gegevens vervolgens in een tabel of weergave met behulp van de functies voor bulksgewijs kopiëren voor bulksgewijs kopiëren in een rij tegelijk.

Gegevensbestanden die worden gebruikt door functies voor bulksgewijs kopiëren hoeven niet te worden gemaakt door een ander programma voor bulksgewijs kopiëren. Elk ander systeem kan een gegevensbestand en indelingsbestand genereren volgens bulksgewijze kopieerdefinities; deze bestanden kunnen vervolgens worden gebruikt met een SQL Server-programma voor bulksgewijs kopiëren om gegevens te importeren in SQL Server. U kunt bijvoorbeeld gegevens exporteren uit een spreadsheet in een bestand met tabscheidingstekens, een indelingsbestand maken waarin het bestand met tabscheidingstekens wordt beschreven en vervolgens een programma voor bulksgewijs kopiëren gebruiken om de gegevens snel in SQL Server te importeren. Gegevensbestanden die door bulkkopie worden gegenereerd, kunnen ook worden geïmporteerd in andere toepassingen. U kunt bijvoorbeeld functies voor bulksgewijs kopiëren gebruiken om gegevens uit een tabel te exporteren of te bekijken in een bestand met tabscheidingstekens dat vervolgens in een spreadsheet kan worden geladen.

Programmeurs die toepassingen coderen om de functies voor bulksgewijs kopiëren te gebruiken, moeten voldoen aan de algemene regels voor goede prestaties van bulksgewijs kopiëren. Zie BulkImport and Export of Data (SQL Server) voor meer informatie over ondersteuning voor bulksgewijs kopiëren in SQL Server.

Beperkingen en beperkingen

Een door de gebruiker gedefinieerde CLR-type (UDT) moet zijn gebonden als binaire gegevens. Zelfs als een indelingsbestand SQLCHAR opgeeft als het gegevenstype voor een doel-UDT-kolom, behandelt het BCP-hulpprogramma de gegevens als binair.

Gebruik SET FMTONLY OFF niet met bulkkopiebewerkingen. ALS U FMTONLY UIT INSTELT, kan uw bulkkopiebewerking mislukken of onverwachte resultaten geven.

OLE DB-provider van SQL Server Native Client

De OLE DB-provider sql Server Native Client implementeert twee methoden voor het uitvoeren van bulkkopiebewerkingen met een SQL Server-database. De eerste methode omvat het gebruik van de IRowsetFastLoad-interface voor bulkkopiebewerkingen op basis van geheugen; en de tweede omvat het gebruik van de IBCPSession-interface voor bulkkopiebewerkingen op basis van bestanden.

Bulkkopiebewerkingen op basis van geheugen gebruiken

De OLE DB-provider van sql Server Native Client implementeert de IRowsetFastLoad-interface om ondersteuning beschikbaar te maken voor bulkkopiebewerkingen op basis van SQL Server-geheugen. De IRowsetFastLoad-interface implementeert de methoden IRowsetFastLoad::Commit en IRowsetFastLoad::InsertRow .

Een sessie inschakelen voor IRowsetFastLoad

De consument meldt de OLE DB-provider van sql Server Native Client van de noodzaak van bulksgewijs kopiëren door de eigenschap SQL Server Native Client OLE DB-providerspecifieke gegevensbron in te stellen SSPROP_ENABLEFASTLOAD op VARIANT_TRUE. Als de eigenschap is ingesteld op de gegevensbron, maakt de consument een OLE DB-providersessie van sql Server Native Client. Met de nieuwe sessie heeft de consument toegang tot de IRowsetFastLoad-interface .

Opmerking

Als de IDataInitialize-interface wordt gebruikt voor het initialiseren van de gegevensbron, moet u de eigenschap SSPROP_IRowsetFastLoad instellen in de parameter rgPropertySets van de methode IOpenRowset::OpenRowset ; anders retourneert de aanroep van de OpenRowset-methode E_NOINTERFACE.

Als u een sessie inschakelt voor bulksgewijs kopiëren, beperkt u de ondersteuning van de OLE DB-provider van sql Server Native Client voor interfaces in de sessie. Een sessie waarvoor bulksgewijs kopiëren is ingeschakeld, bevat alleen de volgende interfaces:

  • IDBSchemaRowset

  • IGetDataSource

  • IOpenRowset

  • ISupportErrorInfo

  • ITransactionJoin

Als u het maken van rijensets waarvoor bulksgewijs kopiëren is ingeschakeld wilt uitschakelen en ervoor wilt zorgen dat de OLE DB-providersessie van de SQL Server-systeemeigen client wordt teruggezet naar standaardverwerking, stelt u SSPROP_ENABLEFASTLOAD opnieuw in op VARIANT_FALSE.

IRowsetFastLoad-rijensets

De bulksgewijs kopiëren rijensets van de SQL Server Native Client OLE DB-provider zijn alleen-schrijven, maar ze maken interfaces beschikbaar waarmee de consument de structuur van een SQL Server-tabel kan bepalen. De volgende interfaces worden weergegeven in een rijenset met bulksgewijs kopiëren ingeschakelde SQL Server Native Client OLE DB-provider:

  • IAccessor

  • IColumnsInfo

  • IColumnsRowset

  • IConvertType

  • IRowsetFastLoad

  • IRowsetInfo

  • ISupportErrorInfo

De providerspecifieke eigenschappen SSPROP_FASTLOADOPTIONS, SSPROP_FASTLOADKEEPNULLS en SSPROP_FASTLOADKEEPIDENTITY gedrag van een SQL Server Native Client OLE DB-provider voor bulksgewijs kopiëren van rijenset. De eigenschappen worden opgegeven in het lid rgProperties van een lid van de parameter rgPropertySetsIOpenRowset .

Eigendom-ID Beschrijving
SSPROP_FASTLOADKEEPIDENTITY Kolom: Nee

R/W: Lezen/schrijven

Type: VT_BOOL

Standaard: VARIANT_FALSE

Beschrijving: Onderhoudt identiteitswaarden die door de consument zijn opgegeven.

VARIANT_FALSE: Waarden voor een identiteitskolom in de SQL Server-tabel worden gegenereerd door SQL Server. Elke waarde die voor de kolom is gebonden, wordt genegeerd door de OLE DB-provider van sql Server Native Client.

VARIANT_TRUE: de consument verbindt een toegangsfunctie die een waarde biedt voor een SQL Server-identiteitskolom. De id-eigenschap is niet beschikbaar voor kolommen die NULL accepteren, dus de consument biedt een unieke waarde voor elke IRowsetFastLoad::Insert-aanroep .
SSPROP_FASTLOADKEEPNULLS Kolom: Nee

R/W: Lezen/schrijven

Type: VT_BOOL

Standaard: VARIANT_FALSE

Beschrijving: Onderhoudt NULL voor kolommen met een STANDAARDbeperking. Is alleen van invloed op SQL Server-kolommen die NULL accepteren en waarop een STANDAARDbeperking is toegepast.

VARIANT_FALSE: SQL Server voegt de standaardwaarde voor de kolom in wanneer de gebruiker van de OLE DB-provider van de SQL Server-client een rij met NULL voor de kolom invoegt.

VARIANT_TRUE: SQL Server voegt NULL in voor de kolomwaarde wanneer de gebruiker van de SQL Server Native Client OLE DB-provider een rij met NULL voor de kolom invoegt.
SSPROP_FASTLOADOPTIONS Kolom: Nee

R/W: Lezen/schrijven

Type: VT_BSTR

Standaard: geen

Beschrijving: Deze eigenschap is hetzelfde als de -h "hint[,... n]" optie van het hulpprogramma bcp . De volgende tekenreeksen kunnen worden gebruikt als optie(en) in het bulksgewijs kopiëren van gegevens naar een tabel.

ORDER(column[ASC | DESC][,... n]): Sorteervolgorde van gegevens in het gegevensbestand. De prestaties van bulksgewijs kopiëren worden verbeterd als het gegevensbestand dat wordt geladen, wordt gesorteerd op basis van de geclusterde index in de tabel.

= ROWS_PER_BATCHbb: Aantal rijen met gegevens per batch (als bb). De server optimaliseert de bulkbelasting op basis van de waarde bb. Standaard is ROWS_PER_BATCH onbekend.

= KILOBYTES_PER_BATCHcc: aantal kilobytes (KB) aan gegevens per batch (als CC). Standaard is KILOBYTES_PER_BATCH onbekend.

TABLOCK: Er wordt een vergrendeling op tabelniveau verkregen voor de duur van de bulkkopiebewerking. Deze optie verbetert de prestaties aanzienlijk, omdat het bewaren van een vergrendeling alleen voor de duur van de bulkkopiebewerking het aantal conflicten in de tabel vermindert. Een tabel kan gelijktijdig door meerdere clients worden geladen als de tabel geen indexen heeft en TABLOCK is opgegeven. Standaard wordt het vergrendelingsgedrag bepaald door de tabelvergrendeling van de tabeloptie bij bulksgewijs laden.

CHECK_CONSTRAINTS: Eventuele beperkingen voor table_name worden gecontroleerd tijdens de bulksgewijs kopiëren. Standaard worden beperkingen genegeerd.

FIRE_TRIGGER: SQL Server maakt gebruik van rijversiebeheer voor triggers en slaat de rijversies op in het versiearchief in tempdb. Daarom zijn optimalisaties voor bulklogboekregistratie beschikbaar, zelfs wanneer triggers zijn ingeschakeld. Voordat u een batch bulksgewijs importeert met een groot aantal rijen waarvoor triggers zijn ingeschakeld, moet u mogelijk de grootte van tempdb uitbreiden.

Bewerkingen voor bulkkopie op basis van bestanden gebruiken

De OLE DB-provider van SQL Server Native Client implementeert de IBCPSession-interface om ondersteuning beschikbaar te maken voor bulkkopiebewerkingen op basis van SQL Server-bestanden. De IBCPSession-interface implementeert de IBCPSession::BCPColFmt, IBCPSession::BCPColumns, IBCPSession::BCPControl, IBCPSession::BCPDone, IBCPSession::BCPExec, IBCPSession::BCPInit, IBCPSession::BCPReadFmt, and IBCPSession::BCPWriteFmt methods.

ODBC-stuurprogramma voor systeemeigen SQL Server-client

Het ODBC-stuurprogramma van de SYSTEEMeigen SQL Server-client onderhoudt dezelfde ondersteuning voor bulkkopiebewerkingen die deel uitmaakten van eerdere versies van het ODBC-stuurprogramma van SQL Server. Zie Voor informatie over bulkkopiebewerkingen met behulp van het ODBC-stuurprogramma van sql Server Native Client, Uitvoeren van bulkkopiebewerkingen (ODBC).

Zie ook

systeemeigen SQL Server-clientfuncties
Eigenschappen van gegevensbron (OLE DB)
bulksgewijs importeren en exporteren van gegevens (SQL Server)
IRowsetFastLoad (OLE DB)
IBCPSession (OLE DB)
Prestaties van bulkimport optimaliseren