Een indelingsbestand maken met bcp (SQL Server)

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

In dit artikel wordt beschreven hoe u het hulpprogramma bcp gebruikt om een indelingsbestand voor een bepaalde tabel te maken. Het indelingsbestand is gebaseerd op de opgegeven optie voor gegevenstypen (-n, -c, -wof -N) en de scheidingstekens voor tabellen of weergaven.

Wanneer u bulksgewijs importeert in een SQL Server-tabel of gegevens bulksgewijs exporteert uit een tabel, kunt u een indelingsbestand gebruiken als een flexibel systeem voor het schrijven van gegevensbestanden. Bestandsformaten hebben weinig of geen bewerking nodig om aan andere gegevensindelingen te voldoen of om gegevensbestanden van andere softwareprogramma's te lezen.

Beperkingen

De versie van het bcp hulpprogramma (bcp.exe) die wordt gebruikt om een formaatbestand te lezen, moet hetzelfde zijn als, of later dan, de versie die is gebruikt om het formaatbestand te maken. Zo kan SQL Server 2025 (17.x) bcp een bestand in versie 16.0-formaat lezen, dat wordt gegenereerd door SQL Server 2022 (16.x), bcpmaar SQL Server 2022 (16.x) bcp kan geen bestand van versie 17.0 lezen, dat wordt gegenereerd door SQL Server 2025 (17.x). bcp

Notitie

Deze syntaxis, inclusief bulksgewijs invoegen, wordt niet ondersteund in Azure Synapse Analytics. In Azure Synapse Analytics en andere integraties van het clouddatabaseplatform kunt u gegevensverplaatsing uitvoeren via de COPY-instructie in Azure Data Factoryof met behulp van T-SQL-instructies zoals COPY INTO en PolyBase.

Indelingsbestanden maken

SQL Server ondersteunt twee typen bestandsformaatbestanden: niet-XML-formaat en XML-formaat. De niet-XML-indeling is de oorspronkelijke indeling die wordt ondersteund door eerdere versies van SQL Server.

Over het algemeen zijn XML- en niet-XML-bestanden uitwisselbaar. We raden u echter aan XML-syntaxis te gebruiken voor het opmaken van bestanden, omdat ze verschillende voordelen bieden ten opzichte van bestanden die niet-XML-indeling zijn.

De codevoorbeelden in dit artikel gebruiken de AdventureWorks2025 of AdventureWorksDW2025 voorbeelddatabase, die u kunt downloaden van de Microsoft SQL Server-voorbeelden en communityprojecten startpagina. Adventure Works Cycles is een fictief productiebedrijf dat wordt gebruikt om databaseconcepten en -scenario's te demonstreren.

Maak een formaat bestand aan

Om bcp te gebruiken om een formaatbestand te maken, geef je het argument format op en gebruik je nul in plaats van een pad naar een gegevensbestand. De format optie vereist altijd de -f optie.

Om een XML-formaat bestand te maken, moet je de -x optie specificeren, zoals bcp <table_or_view> format nul -f <format_file_name> -x.

Om een XML-formaat bestand te onderscheiden, gebruik .xml bijvoorbeeld als bestandsnaamextensie MyTable.xml.

Voor informatie over de structuur en velden van XML-formaat bestanden, zie XML formaat bestanden.

Voorbeelden

Deze sectie bevat voorbeelden die laten zien hoe u bcp gebruikt om een indelingsbestand te maken. De tabel HumanResources.Department bevat vier kolommen: DepartmentID, Name, GroupNameen ModifiedDate.

Een. Maak een formaatbestand voor tekengegevens

Het volgende voorbeeld maakt een formaatbestand voor de HumanResources.Department tabel met behulp van tekengegevensformaten.

Maak een XML-formaat bestand aan met de naam Department-c.xml. Het formaatbestand gebruikt een niet-standaard veldterminator (,). De volgende sectie toont de inhoud van het gegenereerde bestandsbestand.

Het bcp commando bevat de volgende kwalificaties.

Kwalificaties Beschrijving
format nul -x -f <format_file> Geeft het XML-indelingsbestand op.
-c Geeft tekengegevens op.
-t, Hiermee specificeert u een komma (,) als veldseparator.

Opmerking: Als het gegevensbestand gebruikmaakt van het standaardveldeindteken (\t), is de -t-schakeloptie niet nodig.
-T Geeft aan dat bcp verbinding maakt met SQL Server met een vertrouwde verbinding en geïntegreerde beveiliging. Als je -T niet opgeeft, moet je -U en -P opgeven om je succesvol aan te melden.

Voer bij de Windows-opdrachtprompt de volgende bcp opdracht in:

bcp AdventureWorks2025.HumanResources.Department format nul -c -x -f Department-c.xml -t, -T

Het gegenereerde indelingsbestand, Department-c.xml, bevat de volgende XML-elementen:

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="24"/>
</RECORD>
<ROW>
  <COLUMN SOURCE="1" NAME="DepartmentID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="GroupName" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="ModifiedDate" xsi:type="SQLDATETIME"/>
</ROW>
</BCPFORMAT>

Voor informatie over de syntaxis van dit bestandsbestand, zie XML-bestandsbestands. Voor informatie over tekengegevens, zie Gebruik tekenformaat om data te importeren of exporteren.

B. Maak een formatenbestand aan voor native data

Het volgende voorbeeld maakt een formateerbestand voor de HumanResources.Department tabel aan met native datatypes.

Maak een XML-formaat bestand aan met de naam Department-n.xml. De volgende sectie toont de inhoud van het gegenereerde bestandsbestand.

Het bcp commando bevat de volgende kwalificaties.

Kwalificaties Beschrijving
format nul -x -f <format_file> Geeft het XML-indelingsbestand op.
-n Hiermee geeft u systeemeigen gegevenstypen op.
-T Geeft aan dat bcp verbinding maakt met SQL Server via een vertrouwde verbinding met geïntegreerde beveiliging. Als je -T niet opgeeft, moet je -U en -P opgeven om je succesvol aan te melden.

Voer bij de Windows-opdrachtprompt de volgende bcp opdracht in:

bcp AdventureWorks2025.HumanResources.Department format nul -x -f Department-n.xml -n -T

Het gegenereerde indelingsbestand, Department-n.xml, bevat de volgende XML-elementen:

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
  <FIELD ID="1" xsi:type="NativeFixed" LENGTH="2"/>
  <FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="NativeFixed" LENGTH="8"/>
</RECORD>
<ROW>
  <COLUMN SOURCE="1" NAME="DepartmentID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="GroupName" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="ModifiedDate" xsi:type="SQLDATETIME"/>
</ROW>
</BCPFORMAT>

Voor informatie over de syntaxis van dit bestandsbestand, zie XML-bestandsbestands. Voor informatie over het gebruik van native data, zie Gebruik native formaat om data te importeren of exporteren.

C. Een niet-XML-indelingsbestand maken voor systeemeigen Unicode-gegevens

Als u een bestand met een niet-XML-indeling wilt maken voor systeemeigen Unicode-gegevens voor de HumanResources.Department tabel, gebruikt u de volgende opdracht:

bcp AdventureWorks2025.HumanResources.Department format nul -T -N -f Department-n.fmt

Voor meer informatie over het gebruik van Unicode native data, zie Gebruik Unicode Native Format om data te importeren of exporteren.

D. Een niet-XML-indelingsbestand maken voor Unicode-tekengegevens

Als u een niet-XML-indelingsbestand wilt maken voor Unicode-tekengegevens voor de HumanResources.Department tabel die gebruikmaakt van standaardeindtekens, gebruikt u de volgende opdracht:

bcp AdventureWorks2025.HumanResources.Department format nul -T -w -f Department-w.fmt

Voor meer informatie over het gebruik van Unicode-tekengegevens, zie Gebruik Unicode-tekenformaat om data te importeren of exporteren.

E. Gebruik een formaatbestand met de codepagina-optie

Wanneer je een formaatbestand maakt met bcp format, schrijft het informatie over de sortering en de codepagina naar het formaatbestand weg.

Het volgende voorbeeld van een bestandsindeling voor een tabel met vijf kolommen bevat de sorteervolgorde.

13.0
5
1  SQLCHAR         0       0       "\t"             1     c_0          Cyrillic_General_CS_AS
2  SQLCHAR         0       0       "\t"             2     c_1          Cyrillic_General_CS_AS
3  SQLCHAR         0       3000    "\t"             3     c_2          Cyrillic_General_CS_AS
4  SQLCHAR         0       5       "\t"             4     c_3          ""
5  SQLCHAR         0       41      "!!!\r\r\n"      5     c_4          ""

Als je probeert gegevens in SQL Server te importeren met bcp in -c -C65001 -f format_file ..., of met OPENROWSET of BULK INSERT met FORMATFILE='format_file' CODEPAGE=65001 ..., krijgt de sorterings- of codepagina-informatie in het formatteringsbestand voorrang op de optie 65001.

Daarom moet je, als je een formaatbestand genereert, handmatig de verzamelingsinformatie uit het gegenereerde formaatbestand verwijderen voordat je begint met het importeren van gegevens terug in SQL Server.

Het volgende voorbeeld toont het formaat bestand zonder de collatie-informatie.

13.0
5
1  SQLCHAR         0       0       "\t"             1     c_0              ""
2  SQLCHAR         0       0       "\t"             2     c_1              ""
3  SQLCHAR         0       3000    "\t"             3     c_2              ""
4  SQLCHAR         0       5       "\t"             4     c_3              ""
5  SQLCHAR         0       41      "!!!\r\r\n"      5     c_4              ""

Gegevensvelden toewijzen aan tabelkolommen

Een formaatbestand dat door bcp wordt gemaakt, beschrijft alle tabelkolommen in volgorde. Je kunt een bestandsformaat aanpassen om kolommen in de tabel te herschikken of weg te laten. U kunt een opmaakbestand aanpassen aan een gegevensbestand waarvan de velden niet rechtstreeks overeenkomen met de tabelkolommen. Zie de volgende artikelen voor meer informatie: