Delen via


Bestanden opmaken voor het importeren of exporteren van gegevens (SQL Server)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAnalytics Platform System (PDW)

Wanneer u gegevens bulksgewijs importeert in een SQL Server-tabel of gegevens bulksgewijs exporteert uit een tabel, kunt u een indelingsbestand gebruiken om alle indelingsgegevens op te slaan die nodig zijn om gegevens bulksgewijs te exporteren of bulksgewijs te importeren. Dit omvat indelingsinformatie voor elk veld in een gegevensbestand ten opzichte van die tabel.

SQL Server ondersteunt twee typen indelingsbestanden: XML-indelingen en niet-XML-indelingsbestanden. Zowel bestanden die geen XML-indeling zijn als XML-indelingsbestanden bevatten beschrijvingen van elk veld in een gegevensbestand en XML-indelingsbestanden bevatten ook beschrijvingen van de bijbehorende tabelkolommen. Over het algemeen zijn XML- en niet-XML-formaten onderling uitwisselbaar. We raden u echter aan om de XML-syntaxis te gebruiken voor nieuwe indelingsbestanden, omdat ze verschillende voordelen bieden ten opzichte van bestanden die geen XML-indeling zijn. Zie XML Format Files (SQL Server) voor meer informatie.

Opmerking

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.

Voordelen van het opmaken van bestanden

Format-bestanden bieden een flexibel systeem voor het schrijven van gegevensbestanden waarvoor weinig of geen bewerking nodig is om te voldoen aan andere gegevensindelingen of om gegevensbestanden van andere software te lezen.

U kunt gegevens bulksgewijs importeren zonder onnodige gegevens toe te voegen of te verwijderen of bestaande gegevens in het gegevensbestand opnieuw te ordenen. Indelingsbestanden kunnen handig zijn wanneer er een verschil bestaat tussen velden in het gegevensbestand en kolommen in de tabel.

Voorbeelden van indelingsbestanden

In de volgende voorbeelden ziet u de indeling van een bestand met een niet-XML-indeling en van een XML-indelingsbestand. Deze indelingsbestanden komen overeen met de HumanResources.myTeam tabel in de AdventureWorks2025 voorbeelddatabase. Deze tabel bevat vier kolommen: EmployeeID, Name, Titleen ModifiedDate.

Opmerking

Zie de voorbeeldtabel HumanResources.myTeam (SQL Server) voor informatie over deze tabel en hoe u deze maakt.

Eén. Een bestand in een niet-XML-indeling gebruiken

Het volgende niet-XML-indelingsbestand maakt gebruik van de systeemeigen SQL Server-gegevensindeling voor de HumanResources.myTeam tabel. Dit indelingsbestand is gemaakt met behulp van de volgende bcp opdracht.

bcp AdventureWorks2022.HumanResources.myTeam format nul -f myTeam.Fmt -n -T

De bcp opdracht heeft standaard een lokaal, standaardexemplaar van SQL Server met Windows-verificatie. U kunt desgewenst andere instantie- en aanmeldingsgegevens opgeven. Zie bcp Utility voor meer informatie. Als u bijvoorbeeld een externe serverinstantie met Windows-authenticatie wilt specificeren, gebruikt u:

bcp AdventureWorks2022.HumanResources.myTeam format nul -f myTeam.Fmt -n -T -S servername/instancename

De inhoud van dit indelingsbestand is als volgt, te beginnen met het primaire versienummer van SQL Server en de informatie over de metagegevens van de tabel.

14.0
4
1       SQLSMALLINT   0       2       ""   1     EmployeeID               ""
2       SQLNCHAR      2       100     ""   2     Name                     SQL_Latin1_General_CP1_CI_AS
3       SQLNCHAR      2       100     ""   3     Title                    SQL_Latin1_General_CP1_CI_AS
4       SQLNCHAR      2       100     ""   4     Background               SQL_Latin1_General_CP1_CI_AS

Zie Niet-XML-indelingsbestanden (SQL Server) gebruiken voor meer informatie.

B. Een XML-indelingsbestand gebruiken

Het volgende XML-indelingsbestand maakt gebruik van de systeemeigen SQL Server-gegevensindeling voor de HumanResources.myTeam tabel. Dit indelingsbestand is gemaakt met behulp van de volgende bcp opdracht.

bcp AdventureWorks2022.HumanResources.myTeam format nul -f myTeam.xml -x -n -T

Het indelingsbestand bevat:

<?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="NativePrefix" LENGTH="1"/>
  <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="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
  <COLUMN SOURCE="1" NAME="EmployeeID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="Title" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="Background" xsi:type="SQLNVARCHAR"/>
</ROW>
</BCPFORMAT>

Zie XML Format Files (SQL Server) voor meer informatie.

Wanneer is een formatbestand vereist?

Indelingsbestanden zijn meestal vereist in de volgende omstandigheden:

  • Wanneer u een INSERT ... SELECT * FROM OPENROWSET(BULK...) instructie gebruikt.

  • Voor complexe bulkimportsituaties met bcp of BULK INSERT.

  • Hetzelfde gegevensbestand wordt gebruikt als bron voor meerdere tabellen met verschillende schema's.

  • Het gegevensbestand heeft een ander aantal velden dan de doeltabel kolommen heeft; bijvoorbeeld:

    • De doeltabel bevat ten minste één kolom waarvoor een standaardwaarde is gedefinieerd of NULL is toegestaan.
    • De gebruikers hebben SELECT/INSERT geen machtigingen voor een of meer kolommen in de tabel.
    • Eén gegevensbestand wordt gebruikt met twee of meer tabellen met verschillende schema's.
  • De kolomvolgorde verschilt voor het gegevensbestand en de tabel.

  • De eindtekens of lengten van voorvoegsels verschillen tussen de kolommen van het gegevensbestand.

Opmerking

Als er geen indelingsbestand is, wordt de opgegeven gegevensindeling gebruikt als de standaardmethode voor het interpreteren van de velden van het gegevensbestand als een bcp-opdracht (-n, -c, -wof -N) of een BULK INSERT bewerking de DATAFILETYPE optie aangeeft.