Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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 outopdracht maakt u bijvoorbeeld een gegevensbestand met de naamCurrency Types.dat:bcp AdventureWorks2022.Sales.Currency out "Currency Types.dat" -T -cAls u een databasenaam wilt opgeven die een spatie of aanhalingsteken bevat, moet u de optie
-qgebruiken.Voor namen van eigenaars, tabellen of weergaven die ingesloten spaties of aanhalingstekens bevatten, heeft u de volgende opties:
Geef de optie
-qop, ofPlaats 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-cof-woptie 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 bijvoorbeeldbcp outgebruikt,bcp inen vervolgensbcp outcontroleren 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.bcpaangemaakt 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 -TExpanded
In dit voorbeeld wordt een gegevensbestand met de naam
StockItemTransactions_native.bcpgemaakt, 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.bcpgegevensbestand 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 -TExpanded
In dit voorbeeld wordt het
StockItemTransactions_native.bcpgegevensbestand gebruikt dat eerder is gemaakt. In het voorbeeld wordt ook deTABLOCKhint 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> -TBekijk
Error_in.logenOutput_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.
Maak een tabel
dbo.T1in detempdb-database, met twee kolommen,IDenName.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'); GOGenereer 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,RandolphGenereer 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-:
Gegevensindelingen voor bulkimport of bulkexport (SQL Server)
- Systeemeigen indeling gebruiken voor het importeren of exporteren van gegevens (SQL Server)
- Tekenindeling gebruiken om gegevens (SQL Server) te importeren of te exporteren
- Unicode Native Format gebruiken voor het importeren of exporteren van gegevens (SQL Server)
- Unicode-tekenindeling gebruiken om gegevens te importeren of exporteren (SQL Server)
Null-waarden of standaardwaarden behouden tijdens het bulksgewijs importeren (SQL Server)
Identiteitswaarden behouden bij het bulksgewijs importeren van gegevens (SQL Server)
Bestanden opmaken voor het importeren of exporteren van gegevens (SQL Server)
- Een indelingsbestand maken met bcp (SQL Server)
- Een indelingsbestand gebruiken om gegevens bulksgewijs te importeren (SQL Server)
- Een indelingsbestand gebruiken om een tabelkolom (SQL Server) over te slaan
- Een indelingsbestand gebruiken om een gegevensveld (SQL Server) over te slaan
- Een indelingsbestand gebruiken om tabelkolommen toe te wijzen aan gegevensbestandsvelden (SQL Server)
Voorbeelden van bulkimport en export van XML-documenten (SQL Server)
Verwante inhoud
- gegevens voorbereiden voor bulksgewijs exporteren of importeren
- BULK INSERT (Transact-SQL)
- OPENROWSET (Transact-SQL)
- QUOTED_IDENTIFIER (Transact-SQL) INSTELLEN
- sp_configure (Transact-SQL)
- sp_tableoption (Transact-SQL)
- bestanden opmaken voor het importeren of exporteren van gegevens (SQL Server)
Hulp krijgen
- Ideeën voor SQL: Hebt u suggesties voor het verbeteren van SQL Server?
- Microsoft Q & A (SQL Server)
- DBA Stack-Exchange (tag sql-server): Stel SQL Server vragen
- Stack Overflow (tag sql-server): antwoorden op vragen over SQL-ontwikkeling
- Licentievoorwaarden en -informatie voor Microsoft SQL Server
- Ondersteuningsopties voor zakelijke gebruikers
- Aanvullende hulp en feedback voor SQL Server
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.