Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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 outkommando skapar till exempel en datafil med namnetCurrency Types.dat:bcp AdventureWorks2022.Sales.Currency out "Currency Types.dat" -T -cOm 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
-qellerOmslut ä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-celler-wom 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änderbcp out,bcp in, och sedanbcp 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-toch-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
-toch-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.bcpoch 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 -TExpanded
Det här exemplet skapar en datafil med namnet
StockItemTransactions_native.bcpoch 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.bcpskapades tidigare.I en kommandotolk anger du följande kommando:
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_character.bcp -c -TExpanded
I det här exemplet används datafilen som
StockItemTransactions_native.bcpskapades tidigare. Exemplet använder också tipsetTABLOCKoch 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> -TGranska
Error_in.logochOutput_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.
Skapa en tabell
dbo.T1itempdbdatabasen med två kolumnerIDochName.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'); GOGenerera 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,RandolphGenerera 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:
Dataformat för massimport eller massexport (SQL Server)
- Använda internt format för att importera eller exportera data (SQL Server)
- Använd teckenformat för att importera eller exportera data (SQL Server)
- Använda unicode-inbyggt format för att importera eller exportera data (SQL Server)
- Använda Unicode-teckenformat för att importera eller exportera data (SQL Server)
Behåll null-värden eller standardvärden under massimport (SQL Server)
Formatera filer för att importera eller exportera data (SQL Server)
- Skapa en formatfil med bcp (SQL Server)
- Använd en formatfil för att massimportera data (SQL Server)
- Använd en formatfil för att hoppa över en tabellkolumn (SQL Server)
- Använd en formatfil för att hoppa över ett datafält (SQL Server)
- Använd en formatfil för att mappa tabellkolumner till datafilfält (SQL Server)
Exempel på massimport och export av XML-dokument (SQL Server)
Relaterat innehåll
- Förbereda data för massexport eller import
- BULK INSERT (Transact-SQL)
- OPENROWSET (Transact-SQL)
- SET QUOTED_IDENTIFIER (Transact-SQL)
- sp_configure (Transact-SQL)
- sp_tableoption (Transact-SQL)
- Formatera filer för att importera eller exportera data (SQL Server)
Få hjälp
- Idéer för SQL: Har du förslag på hur du kan förbättra SQL Server?
- Microsoft Q &A (SQL Server)
- DBA Stack Exchange (tagg sql-server): Ställ frågor till SQL Server
- Stack Overflow (tagg sql-server): Svar på frågor om SQL-utveckling
- Licensvillkor och information för Microsoft SQL Server
- Supportalternativ för företagsanvändare
- Ytterligare hjälp och feedback om SQL Server
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.