Så här använder du bcp-verktyget

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-databas i Microsoft Fabric

Masskopieringsprogrammet (bcp) masskopierar data mellan en instans av SQL Server och en datafil i ett användardefinieringsformat.

Remarks

  • Information om var du hittar eller hur du kör bcp-verktyget och om syntaxkonventionerna för kommandoradsverktyg finns i SQL-kommandoradsverktyg (Databasmotor).

  • Information om hur du förbereder data för massimport- eller exportåtgärder finns i Förbereda data för massexport eller massimport.

  • Information om när radinfogningsåtgärder som utförs genom massimport loggas i transaktionslogg finns under Krav för minimal loggning vid massimport.

  • Tecknen <, >, |, & och ^ är specialtecken för kommandoskal och måste föregås av escape-tecknet (^) eller omges av citattecken när de används i en sträng (till exempel "StringContaining&Symbol"). Om du använder citattecken för att omsluta en sträng som innehåller ett av specialteckenen anges citattecknen som en del av miljövariabelvärdet. Mer information finns i Använda ytterligare specialtecken.

Stöd för intern datafil

I SQL Server stöder bcp-verktyget inbyggda datafiler som är kompatibla med SQL Server-versioner från och med SQL Server 2000 (8.x) och senare.

Beräknade kolumner och tidsstämpelkolumner

Värden i datafilen som importeras för beräknade kolumner eller tidsstämpelkolumner ignoreras och SQL Server tilldelar automatiskt värden. Om datafilen inte innehåller värden för de beräknade kolumnerna eller tidsstämpelkolumnerna i tabellen använder du en formatfil för att ange att de beräknade kolumnerna eller tidsstämpelkolumnerna i tabellen ska hoppas över när data importeras. SQL Server tilldelar automatiskt värden för kolumnen.

Beräknade kolumner och tidsstämpelkolumner masskopieras från SQL Server till en datafil som vanligt.

Ange identifierare som innehåller blanksteg eller citattecken

SQL Server-identifierare kan innehålla tecken som inbäddade blanksteg och citattecken. Sådana identifierare måste behandlas på följande sätt:

  • När du anger en identifierare eller ett filnamn som innehåller ett blanksteg eller citattecken i kommandotolken omger du identifieraren inom citattecken ("").

    Följande bcp out kommando skapar till exempel en datafil med namnet Currency Types.dat:

    bcp AdventureWorks2022.Sales.Currency out "Currency Types.dat" -T -c
    
  • Om du vill ange ett databasnamn som innehåller ett blanksteg eller citattecken måste du använda alternativet -q .

  • För namn på ägare, tabeller eller vyer som innehåller inbäddade blanksteg eller citattecken kan du antingen:

    • Ange alternativet -q eller

    • Omslut ägaren, tabellen eller vynamn inom hakparenteser ([]) i citattecken.

Datavalidering

bcp framtvingar nu dataverifiering och datakontroller som kan leda till att skript misslyckas om de körs på ogiltiga data i en datafil. Bcp verifierar till exempel nu att:

  • De inbyggda representationerna av flyttal eller verkliga datatyper är giltiga.

  • Unicode-data har en jämn bytelängd.

Former av ogiltiga data som kan massimporteras i tidigare versioner av SQL Server kan inte läsas in nu. I tidigare versioner inträffade inte felet förrän en klient försökte komma åt ogiltiga data. Den tillagda valideringen minimerar överraskningar när du kör frågor mot data efter massladdning.

Massexportera eller importera SQLXML-dokument

Om du vill massexportera eller importera SQLXML-data använder du någon av följande datatyper i formatfilen.

Datatyp Effect
SQLCHAR eller SQLVARYCHAR Data skickas på klientens kodsida eller på den kodsida som kollationen antyder. Effekten är densamma som att ange växeln -c utan att ange en formatfil.
SQLNCHAR eller SQLNVARCHAR Data skickas som Unicode. Effekten är densamma som att ange växeln -w utan att ange en formatfil.
SQLBINARY eller SQLVARYBIN Data skickas utan konvertering.

Metodtips för teckenläge (-c) och inbyggt läge (-n)

Det här avsnittet innehåller rekommendationer för teckenläge (-c) och inbyggt läge (-n).

  • (Administratör/användare) Använd ursprungligt format (-n) när det är möjligt för att undvika avgränsningsproblemet. Använd det interna formatet för att exportera och importera med SQL Server. Exportera data från SQL Server med alternativet -c eller -w om du planerar att exportera data till en icke-SQL Server-databas.

  • (Administratör) Verifiera data när du använder bcp out. När du till exempel använder bcp out, bcp in, och sedan bcp out, kontrollera att data exporteras korrekt och att avslutsvärdena inte används som en del av något datavärde. Överväg att åsidosätta standardavslutare genom att använda -t och -r-alternativen med slumpmässiga hexadecimala värden, för att undvika konflikter mellan avslutningsvärden och datavärden.

  • (Användare) Använd en lång och unik avslutare (valfri sekvens med byte eller tecken) för att minimera risken för en konflikt med det faktiska strängvärdet. Detta kan göras med hjälp av alternativen -t och -r.

Examples

Exemplen i det här avsnittet använder exempeldatabasen WideWorldImporters för SQL Server 2016 (13.x) och senare versioner, Azure SQL Database och Azure SQL Managed Instance. WideWorldImporters kan laddas ned från https://github.com/Microsoft/sql-server-samples/releases/tag/wide-world-importers-v1.0. Se RESTORE-instruktioner för syntaxen för att återställa exempeldatabasen.

Exempel på testvillkor

Om inget annat anges förutsätter exemplen att du använder Windows-autentisering och har en betrodd anslutning till serverinstansen där du kör bcp-kommandot . En katalog med namnet D:\bcp används i många av exemplen. Ersätt <server_name> och andra platshållarvärden med värden för din miljö.

Följande Transact-SQL skript skapar en tom kopia av WideWorldImporters.Warehouse.StockItemTransactions tabellen och lägger sedan till en primärnyckelbegränsning:

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

Du kan trunkera StockItemTransactions_bcp tabellen efter behov:

TRUNCATE TABLE WideWorldImporters.Warehouse.StockItemTransactions_bcp;

A. Identifiera bcp-verktygsversion

I en kommandotolk anger du följande kommando:

bcp -v

B. Kopiera tabellrader till en datafil (med en betrodd anslutning)

Följande exempel illustrerar alternativet out i WideWorldImporters.Warehouse.StockItemTransactions tabellen.

  • Grundläggande

    Det här exemplet skapar en datafil med namnet StockItemTransactions_character.bcp och kopierar tabelldata till den med hjälp av teckenformat .

    I en kommandotolk anger du följande kommando:

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

    Det här exemplet skapar en datafil med namnet StockItemTransactions_native.bcp och kopierar tabelldata till den med det interna formatet. Exemplet anger också det maximala antalet syntaxfel, en felfil och en utdatafil.

    I en kommandotolk anger du följande kommando:

    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
    

Granska Error_out.log och Output_out.log. Error_out.log bör vara tom. Jämför filstorlekarna mellan StockItemTransactions_character.bcp och StockItemTransactions_native.bcp.

C. Kopiera tabellrader till en datafil (med autentisering i blandat läge)

I följande exempel visas alternativet out i WideWorldImporters.Warehouse.StockItemTransactions tabellen. Det här exemplet skapar en datafil med namnet StockItemTransactions_character.bcp och kopierar tabelldata till den med hjälp av teckenformat .

Exemplet förutsätter att du använder autentisering i blandat läge och du måste använda växeln -U för att ange ditt inloggnings-ID. Om du inte ansluter till standardinstansen av SQL Server på den lokala datorn använder du dessutom växeln -S för att ange systemnamnet och eventuellt ett instansnamn.

I en kommandotolk anger du följande kommando: (Systemet uppmanar dig att ange ditt lösenord.)

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

D. Kopiera data från en fil till en tabell

Följande exempel illustrerar alternativet in i WideWorldImporters.Warehouse.StockItemTransactions_bcp tabellen med filer som skapats tidigare.

  • Grundläggande

    I det här exemplet används datafilen som StockItemTransactions_character.bcp skapades tidigare.

    I en kommandotolk anger du följande kommando:

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

    I det här exemplet används datafilen som StockItemTransactions_native.bcp skapades tidigare. Exemplet använder också tipset TABLOCK och anger batchstorleken, det maximala antalet syntaxfel, en felfil och en utdatafil.

    I en kommandotolk anger du följande kommando:

    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
    

    Granska Error_in.log och Output_in.log.

E. Kopiera en specifik kolumn till en datafil

Om du vill kopiera en specifik kolumn kan du använda alternativet queryout . I följande exempel kopieras endast StockItemTransactionID tabellens Warehouse.StockItemTransactions kolumn till en datafil.

I en kommandotolk anger du följande kommando:

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

F. Kopiera en specifik rad till en datafil

Om du vill kopiera en viss rad kan du använda alternativet queryout . I följande exempel kopieras endast raden för den person som heter Amy Trefl från WideWorldImporters.Application.People tabellen till en datafil Amy_Trefl_c.bcp.

Anmärkning

Växeln -d används för att identifiera databasen.

I en kommandotolk anger du följande kommando:

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

G. Kopiera data från en fråga till en datafil

Om du vill kopiera resultatuppsättningen från en Transact-SQL-instruktion till en datafil använder du alternativet queryout . I följande exempel kopieras namnen från WideWorldImporters.Application.People tabellen, ordnade efter fullständigt namn, till People.txt datafilen.

Anmärkning

Växeln -t används för att skapa en kommaavgränsad fil.

I en kommandotolk anger du följande kommando:

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

H. Skapa formatfiler

I följande exempel skapas tre olika formatfiler för Warehouse.StockItemTransactions tabellen i WideWorldImporters databasen. Granska innehållet i varje skapad fil.

I en kommandotolk anger du följande kommandon:

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

Anmärkning

Växeln -x stöds endast i Windows.

Mer information finns i Använda icke-XML-formatfiler (SQL Server) och XML-formatfiler (SQL Server).

I. Använda en formatfil för massimport med bcp

För att använda en tidigare skapad formatfil när du importerar data till en SQL Server-instans, använder du -f-växeln med in-alternativet. Följande kommando kopierar till exempel innehållet i en datafil, StockItemTransactions_character.bcp, till en kopia av Warehouse.StockItemTransactions_bcp tabellen med hjälp av den tidigare skapade formatfilen . StockItemTransactions_c.xml

Anmärkning

Omkopplaren -L används för att endast importera de första 100 posterna.

I en kommandotolk anger du följande kommando:

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

Anmärkning

Formatfiler är användbara när datafilfälten skiljer sig från tabellkolumnerna. till exempel i deras antal, ordning eller datatyper. Mer information finns i Formatera filer för att importera eller exportera data (SQL Server).

J. Ange en kodsida

Följande exempel på partiell kod visar bcp-import när du anger en kodsida 65001:

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

K. Exempel på utdatafil med ett anpassat fält och radavgränsare

Det här exemplet visar två exempelfiler som genereras av bcp med hjälp av anpassade fält och radavgränsare.

  1. Skapa en tabell dbo.T1 i tempdb databasen med två kolumner ID och 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. Generera en utdatafil från exempeltabellen dbo.T1med hjälp av en anpassad fältavgränsare.

    I det här exemplet -t , anger du den anpassade fältavgränsaren. Ersätt <server_name> med ett värde för din miljö.

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

    Här är resultatet.

    1,Natalia
    2,Mark
    3,Randolph
    
  3. Generera en utdatafil från exempeltabellen dbo.T1med hjälp av en anpassad fältavgränsare och anpassad radavgränsare.

    I det här exemplet -t , anger du den anpassade fältavgränsaren och -r : anger den anpassade radavgränsaren. Ersätt <server_name> med ett värde för din miljö.

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

    Här är resultatet.

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

    Anmärkning

    Radavgränsaren läggs alltid till, även till den sista posten. Fältavgränsaren läggs dock inte till i det sista fältet.

Ytterligare exempel

Följande artiklar innehåller exempel på hur du använder bcp:

Få hjälp

Bidra till SQL-dokumentation

Visste du att du kan redigera SQL-innehåll själv? Om du gör det hjälper du inte bara till att förbättra vår dokumentation, utan du får även kredit som deltagare på sidan.

Mer information finns i Redigera Microsoft Learn-dokumentation.