Het bcp-hulpprogramma gebruiken

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

Het bulk-kopieerprogramma (bcp) kopieert gegevens tussen een SQL Server-exemplaar en een gegevensbestand in een door de gebruiker bepaalde indeling.

Opmerkingen

  • Zie sql-opdrachtregelprogramma's (Database Engine) voor informatie over waar u het bcp-hulpprogramma en de syntaxisconventies van de opdrachtregelprogramma's kunt uitvoeren.

  • Zie Gegevens voorbereiden voor bulksgewijs exporteren of importerenvoor informatie over het voorbereiden van gegevens voor bulkimport- of exportbewerkingen.

  • Zie Vereisten voor minimale logboekregistratie bij bulkimportvoor informatie over wanneer rij-invoegbewerkingen die worden uitgevoerd door bulkimport in het transactielogboek worden geregistreerd.

  • De tekens <, >, , |en &^ zijn speciale opdrachtshelltekens en ze moeten worden voorafgegaan door het escapeteken (^) of tussen aanhalingstekens bij gebruik in een tekenreeks (bijvoorbeeld "StringContaining&Symbol"). Als u aanhalingstekens gebruikt om een tekenreeks tussen een van de speciale tekens te plaatsen, worden de aanhalingstekens ingesteld als onderdeel van de waarde van de omgevingsvariabele. Zie Aanvullende speciale tekens gebruiken voor meer informatie.

Ondersteuning voor systeemeigen gegevensbestanden

In SQL Server ondersteunt het hulpprogramma bcp systeemeigen gegevensbestanden die compatibel zijn met SQL Server-versies vanaf SQL Server 2000 (8.x) en hoger.

Berekende kolommen en tijdstempelkolommen

Waarden in het gegevensbestand dat wordt geïmporteerd voor berekende of tijdstempel kolommen worden genegeerd en SQL Server wijst automatisch waarden toe. Als het gegevensbestand geen waarden bevat voor de berekende of tijdstempel kolommen in de tabel, gebruikt u een indelingsbestand om op te geven dat de berekende of tijdstempel kolommen in de tabel moeten worden overgeslagen bij het importeren van gegevens; SQL Server wijst automatisch waarden toe voor de kolom.

Berekende en tijdstempels kolommen worden zoals gebruikelijk bulksgewijs gekopieerd van SQL Server naar een gegevensbestand.

Id's opgeven die spaties of aanhalingstekens bevatten

SQL Server-id's kunnen tekens bevatten, zoals ingesloten spaties en aanhalingstekens. Deze id's moeten als volgt worden behandeld:

  • Wanneer u een id of bestandsnaam opgeeft die een spatie of aanhalingsteken bevat bij de opdrachtprompt, plaatst u de id tussen aanhalingstekens ("").

    Met de volgende bcp out opdracht maakt u bijvoorbeeld een gegevensbestand met de naam Currency Types.dat:

    bcp AdventureWorks2022.Sales.Currency out "Currency Types.dat" -T -c
    
  • Als u een databasenaam wilt opgeven die een spatie of aanhalingsteken bevat, moet u de optie -q gebruiken.

  • Voor namen van eigenaars, tabellen of weergaven die ingesloten spaties of aanhalingstekens bevatten, heeft u de volgende opties:

    • Geef de optie -q op, of

    • Plaats de naam van de eigenaar, tabel of weergave tussen haakjes ([]) tussen de aanhalingstekens.

Gegevensvalidatie

bcp- dwingt nu gegevensvalidatie en gegevenscontroles af die ertoe kunnen leiden dat scripts mislukken als ze worden uitgevoerd op ongeldige gegevens in een gegevensbestand. Zo controleert bcp nu dat:

  • De systeemeigen weergaven van float- of echte gegevenstypen zijn geldig.

  • Unicode-gegevens hebben een even bytelengte.

Formulieren van ongeldige gegevens die bulksgewijs kunnen worden geïmporteerd in eerdere versies van SQL Server, kunnen nu niet worden geladen; overwegende dat in eerdere versies de fout pas is opgetreden wanneer een client toegang probeerde te krijgen tot de ongeldige gegevens. De toegevoegde validatie minimaliseert verrassingen bij het uitvoeren van gegevensopvragingen na bulkverwerking.

SQLXML-documenten bulksgewijs exporteren of importeren

Als u SQLXML-gegevens bulksgewijs wilt exporteren of importeren, gebruikt u een van de volgende gegevenstypen in uw indelingsbestand.

Gegevenstype Effect
SQLCHAR of SQLVARYCHAR De gegevens worden verzonden in de codepagina van de client of in de codepagina zoals geïmpliceerd door de sortering. Het effect is hetzelfde als het opgeven van de -c switch zonder een indelingsbestand op te geven.
SQLNCHAR of SQLNVARCHAR De gegevens worden verzonden als Unicode. Het effect is hetzelfde als het opgeven van de -w switch zonder een indelingsbestand op te geven.
SQLBINARY of SQLVARYBIN De gegevens worden zonder conversie verzonden.

Beste praktijken voor tekenmodus (-c) en systeemeigen modus (-n)

Deze sectie bevat aanbevelingen voor de tekenmodus (-c) en de systeemeigen modus (-n).

  • (Beheerder/gebruiker) Gebruik indien mogelijk een systeemeigen indeling (-n) om het scheidingsteken te voorkomen. Gebruik het native formaat voor exporteren en importeren met behulp van SQL Server. Gegevens exporteren uit SQL Server met behulp van de -c of -w optie als u van plan bent om de gegevens te exporteren naar een niet-SQL Server-database.

  • (Beheerder) Gegevens controleren wanneer u bcp outgebruikt. Wanneer u bijvoorbeeld bcp outgebruikt, bcp inen vervolgens bcp out controleren of de gegevens correct zijn geëxporteerd en of de eindwaarden niet worden gebruikt als onderdeel van een bepaalde gegevenswaarde. Overweeg om de standaardeindtekens (met behulp van -t- en -r-opties) te overschrijven met willekeurige hexadecimale waarden om conflicten tussen eindwaarden en gegevenswaarden te voorkomen.

  • (Gebruiker) Gebruik een lange en unieke afsluiter (een willekeurige reeks bytes of tekens) om de kans op een conflict met de werkelijke tekenreekswaarde te minimaliseren. U kunt dit doen met behulp van de -t- en -r-opties.

Voorbeelden

In de voorbeelden in deze sectie wordt gebruikgemaakt van de WideWorldImporters voorbeelddatabase voor SQL Server 2016 (13.x) en latere versies, Azure SQL Database en Azure SQL Managed Instance. WideWorldImporters kan worden gedownload van https://github.com/Microsoft/sql-server-samples/releases/tag/wide-world-importers-v1.0. Zie RESTORE-instructies voor de syntaxis om de voorbeelddatabase te herstellen.

Voorbeeldtestvoorwaarden

Tenzij anders is opgegeven, wordt in de voorbeelden ervan uitgegaan dat u Windows-verificatie gebruikt en een vertrouwde verbinding hebt met het serverexemplaren waarop u de opdracht bcp uitvoert. In veel voorbeelden wordt een map met de naam D:\bcp gebruikt. Vervang <server_name> en andere tijdelijke aanduidingen door waarden voor uw omgeving.

Met het volgende Transact-SQL script wordt een lege kopie van de WideWorldImporters.Warehouse.StockItemTransactions tabel gemaakt en wordt vervolgens een primaire-sleutelbeperking toegevoegd:

USE WideWorldImporters;
GO

SET NOCOUNT ON;

IF NOT EXISTS (SELECT *
               FROM sys.tables
               WHERE name = 'Warehouse.StockItemTransactions_bcp')
    BEGIN
        SELECT *
        INTO WideWorldImporters.Warehouse.StockItemTransactions_bcp
        FROM WideWorldImporters.Warehouse.StockItemTransactions
        WHERE 1 = 2;

        ALTER TABLE Warehouse.StockItemTransactions_bcp
        ADD CONSTRAINT PK_Warehouse_StockItemTransactions_bcp
            PRIMARY KEY NONCLUSTERED (StockItemTransactionID ASC);
    END

U kunt de StockItemTransactions_bcp-tabel afkorten indien nodig.

TRUNCATE TABLE WideWorldImporters.Warehouse.StockItemTransactions_bcp;

Eén. Versie van het bcp-hulpprogramma identificeren

Voer bij een opdrachtprompt de volgende opdracht in:

bcp -v

B. Tabelrijen kopiëren naar een gegevensbestand (met een vertrouwde verbinding)

In de volgende voorbeelden ziet u de optie out in de WideWorldImporters.Warehouse.StockItemTransactions tabel.

  • Basic

    In dit voorbeeld wordt een gegevensbestand met de naam StockItemTransactions_character.bcp aangemaakt en worden de tabelgegevens erin gekopieerd met behulp van het -tekenset in-formaat.

    Voer bij een opdrachtprompt de volgende opdracht in:

    bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -T
    
  • Expanded

    In dit voorbeeld wordt een gegevensbestand met de naam StockItemTransactions_native.bcp gemaakt, en worden de tabelgegevens erin gekopieerd met behulp van de standaard-indeling. In het voorbeeld wordt ook het maximum aantal syntaxisfouten, een foutenbestand en een uitvoerbestand opgegeven.

    Voer bij een opdrachtprompt de volgende opdracht in:

    bcp WideWorldImporters.Warehouse.StockItemTransactions OUT D:\bcp\StockItemTransactions_native.bcp -m 1 -n -e D:\bcp\Error_out.log -o D:\bcp\Output_out.log -S <server_name> -T
    

Bekijk Error_out.log en Output_out.log. Error_out.log moet leeg zijn. Vergelijk de bestandsgrootten tussen StockItemTransactions_character.bcp en StockItemTransactions_native.bcp.

C. Tabelrijen kopiëren naar een gegevensbestand (met verificatie in gemengde modus)

In het volgende voorbeeld ziet u de optie out in de tabel WideWorldImporters.Warehouse.StockItemTransactions. In dit voorbeeld wordt een gegevensbestand met de naam StockItemTransactions_character.bcp aangemaakt en worden de tabelgegevens erin gekopieerd met behulp van het -tekenset in-formaat.

In het voorbeeld wordt ervan uitgegaan dat u verificatie in de gemengde modus gebruikt en dat u de -U switch moet gebruiken om uw aanmeldings-id op te geven. Gebruik ook, tenzij u verbinding maakt met het standaardexemplaar van SQL Server op de lokale computer, de -S-switch om de systeemnaam en eventueel een exemplaarnaam op te geven.

Voer bij een opdrachtprompt de volgende opdracht in: (Het systeem vraagt u om uw wachtwoord.)

bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -U<login_id> -S<server_name\instance_name>

D. Gegevens kopiëren van een bestand naar een tabel

In de volgende voorbeelden ziet u de optie in in de WideWorldImporters.Warehouse.StockItemTransactions_bcp tabel met behulp van bestanden die u eerder hebt gemaakt.

  • Basic

    In dit voorbeeld wordt het StockItemTransactions_character.bcp gegevensbestand gebruikt dat eerder is gemaakt.

    Voer bij een opdrachtprompt de volgende opdracht in:

    bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_character.bcp -c -T
    
  • Expanded

    In dit voorbeeld wordt het StockItemTransactions_native.bcp gegevensbestand gebruikt dat eerder is gemaakt. In het voorbeeld wordt ook de TABLOCK hint gebruikt en wordt de batchgrootte, het maximum aantal syntaxisfouten, een foutbestand en een uitvoerbestand opgegeven.

    Voer bij een opdrachtprompt de volgende opdracht in:

    bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_native.bcp -b 5000 -h "TABLOCK" -m 1 -n -e D:\bcp\Error_in.log -o D:\bcp\Output_in.log -S <server_name> -T
    

    Bekijk Error_in.log en Output_in.log.

E. Een specifieke kolom kopiëren naar een gegevensbestand

Als u een specifieke kolom wilt kopiëren, kunt u de optie queryout gebruiken. In het volgende voorbeeld wordt alleen de kolom StockItemTransactionID van de Warehouse.StockItemTransactions tabel gekopieerd naar een gegevensbestand.

Voer bij een opdrachtprompt de volgende opdracht in:

bcp "SELECT StockItemTransactionID FROM WideWorldImporters.Warehouse.StockItemTransactions WITH (NOLOCK)" queryout D:\bcp\StockItemTransactionID_c.bcp -c -T

F. Een specifieke rij kopiëren naar een gegevensbestand

Als u een specifieke rij wilt kopiëren, kunt u de optie queryout gebruiken. In het volgende voorbeeld wordt alleen de rij gekopieerd voor de persoon met de naam Amy Trefl uit de WideWorldImporters.Application.People tabel in een gegevensbestand Amy_Trefl_c.bcp.

Opmerking

De -d-switch wordt gebruikt om de database te identificeren.

Voer bij een opdrachtprompt de volgende opdracht in:

bcp "SELECT * from Application.People WHERE FullName = 'Amy Trefl'" queryout D:\bcp\Amy_Trefl_c.bcp -d WideWorldImporters -c -T

G. Gegevens kopiëren van een query naar een gegevensbestand

Als u de resultatenset wilt kopiëren van een Transact-SQL instructie naar een gegevensbestand, gebruikt u de optie queryout. In het volgende voorbeeld worden de namen uit de WideWorldImporters.Application.People tabel gekopieerd, gesorteerd op volledige naam, in het People.txt gegevensbestand.

Opmerking

De schakeloptie -t wordt gebruikt om een door komma's gescheiden bestand te creëren.

Voer bij een opdrachtprompt de volgende opdracht in:

bcp "SELECT FullName, PreferredName FROM WideWorldImporters.Application.People ORDER BY FullName" queryout D:\bcp\People.txt -t, -c -T

H. Formaatbestanden maken

In het volgende voorbeeld worden drie verschillende indelingsbestanden gemaakt voor de Warehouse.StockItemTransactions tabel in de WideWorldImporters-database. Controleer de inhoud van elk gemaakt bestand.

Voer bij een opdrachtprompt de volgende opdrachten in:

REM non-XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_c.fmt -c -T

REM non-XML native format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_n.fmt -n -T

REM XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\bcp\StockItemTransactions_c.xml -x -c -T

Opmerking

De -x switch wordt alleen ondersteund in Windows.

Zie Bestanden met niet-XML-indelingen (SQL Server) en XML-indelingsbestanden (SQL Server) gebruiken voor meer informatie.

I. Een indelingsbestand gebruiken om bulksgewijs te importeren met bcp

Als u een eerder gemaakt indelingsbestand wilt gebruiken bij het importeren van gegevens in een exemplaar van SQL Server, gebruikt u de -f-switch met de optie in. Met de volgende opdracht wordt bijvoorbeeld bulksgewijs de inhoud van een gegevensbestand, StockItemTransactions_character.bcp, gekopieerd naar een kopie van de Warehouse.StockItemTransactions_bcp tabel met behulp van het eerder gemaakte indelingsbestand, StockItemTransactions_c.xml.

Opmerking

De -L-switch wordt gebruikt om alleen de eerste 100 records te importeren.

Voer bij een opdrachtprompt de volgende opdracht in:

bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp in D:\bcp\StockItemTransactions_character.bcp -L 100 -f D:\bcp\StockItemTransactions_c.xml -T

Opmerking

Indelingsbestanden zijn handig wanneer de velden van het gegevensbestand verschillen van de tabelkolommen; Bijvoorbeeld in hun nummer, volgorde of gegevenstypen. Zie Bestanden opmaken voor het importeren of exporteren van gegevens (SQL Server)voor meer informatie.

J. Een codepagina opgeven

In het volgende voorbeeld van gedeeltelijke code wordt bcp geïmporteerd waarbij de codepagina 65001 wordt opgegeven.

bcp MyTable in "D:\data.csv" -T -c -C 65001 -t , ...

K. Voorbeeld van een uitvoerbestand met aangepaste veld- en rijeindtekens.

In dit voorbeeld ziet u twee voorbeeldbestanden die zijn gegenereerd door bcp met behulp van aangepaste veld- en rijeindtekens.

  1. Maak een tabel dbo.T1 in de tempdb-database, met twee kolommen, ID en Name.

    USE tempdb;
    GO
    
    CREATE TABLE dbo.T1
    (
        ID INT,
        [Name] NVARCHAR (20)
    );
    GO
    
    INSERT INTO dbo.T1 VALUES (1, N'Natalia');
    INSERT INTO dbo.T1 VALUES (2, N'Mark');
    INSERT INTO dbo.T1 VALUES (3, N'Randolph');
    GO
    
  2. Genereer een uitvoerbestand uit de voorbeeldtabel dbo.T1met behulp van een aangepast veldeindteken.

    In dit voorbeeld -t , geeft u het aangepaste veldeindteken op. Vervang door <server_name> een waarde voor uw omgeving.

    bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t ,
    

    Hier is het resultatenoverzicht.

    1,Natalia
    2,Mark
    3,Randolph
    
  3. Genereer een uitvoerbestand van de voorbeeldtabel dbo.T1met een aangepast veldeindteken en een aangepast rijeindteken.

    In dit voorbeeld -t , geeft u het aangepaste veldeindteken op en -r : geeft u het aangepaste rijeindteken op. Vervang door <server_name> een waarde voor uw omgeving.

    bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t , -r :
    

    Hier is het resultatenoverzicht.

    1,Natalia:2,Mark:3,Randolph:
    

    Opmerking

    Het rijeindteken wordt steeds toegevoegd, zelfs aan het laatste record. Het veldscheidingsteken wordt echter niet toegevoegd aan het laatste veld.

Aanvullende voorbeelden

De volgende artikelen bevatten voorbeelden van het gebruik van bcp-:

Hulp krijgen

Bijdragen aan SQL-documentatie

Wist u dat u zelf SQL-inhoud kunt bewerken? Door dit te doen helpt u niet alleen onze documentatie te verbeteren, maar krijgt u ook erkenning als bijdrager aan de pagina.

Zie Microsoft Learn-documentatie bewerken voor meer informatie.