Delen via


XML-indelingsbestanden (SQL Server)

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

SQL Server biedt een XML-schema dat syntaxis definieert voor het schrijven van XML-indelingsbestanden die moeten worden gebruikt voor het bulksgewijs importeren van gegevens in een SQL Server-tabel. XML-indelingsbestanden moeten voldoen aan dit schema, dat is gedefinieerd in de XML Schema Definition Language (XSDL). XML-indelingsbestanden worden alleen ondersteund wanneer SQL Server-hulpprogramma's samen met SQL Server Native Client worden geïnstalleerd.

U kunt een XML-indelingsbestand gebruiken met een bcp-opdracht , BULK INSERT -instructie of INSERT ... SELECT * FROM OPENROWSET(BULK...) -instructie. Met de opdracht bcp kunt u automatisch een XML-indelingsbestand voor een tabel genereren; Zie het bcp-hulpprogramma voor meer informatie.

Er worden twee typen indelingsbestanden ondersteund voor bulksgewijs exporteren en importeren: bestanden zonder XML-indeling en XML-indelingsbestanden. XML-indelingsbestanden bieden een flexibel en krachtig alternatief voor niet-XML-indelingsbestanden. Zie Niet-XML-indelingsbestanden (SQL Server) gebruiken voor informatie over bestanden die geen XML-indeling zijn.

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 Factory of met behulp van T-SQL-instructies zoals COPY INTO en PolyBase.

Voordelen van bestanden in XML-indeling

XML-indelingsbestanden zijn zelfbeschrijfbaar, waardoor ze gemakkelijk kunnen worden gelezen, gemaakt en uitgebreid. Ze kunnen door mensen worden gelezen, zodat u gemakkelijk kunt begrijpen hoe gegevens tijdens bulkbewerkingen worden geïnterpreteerd.

Bestanden in XML-indeling bevatten de gegevenstypen van de doelkolommen. De XML-codering beschrijft duidelijk de gegevenstypen en gegevenselementen van het gegevensbestand en ook de toewijzing tussen gegevenselementen en tabelkolommen.

Dit maakt scheiding mogelijk tussen de manier waarop gegevens worden weergegeven in het gegevensbestand en welk gegevenstype is gekoppeld aan elk veld in het bestand. Als een gegevensbestand bijvoorbeeld een tekenweergave van de gegevens bevat, gaat het bijbehorende SQL-kolomtype verloren.

Met een XML-indelingsbestand kunt u een veld met één groot objectgegevenstype (LOB) uit een gegevensbestand laden.

Een XML-indelingsbestand kan verbeterd worden en blijft compatibel met zijn versies uit het verleden. Bovendien vereenvoudigt de duidelijkheid van XML-codering het maken van bestanden met meerdere indelingen voor een bepaald gegevensbestand. Dit is handig als u alle of sommige gegevensvelden moet toewijzen aan kolommen in verschillende tabellen of weergaven.

De XML-syntaxis is onafhankelijk van de richting van de bewerking; Dat wil gezegd, de syntaxis is hetzelfde voor bulkexport en bulkimport.

U kunt XML-indelingsbestanden gebruiken om gegevens bulksgewijs te importeren in tabellen of niet-gepartitioneerde weergaven en om gegevens bulksgewijs te exporteren.

Voor de OPENROWSET(BULK...) functie die een doeltabel opgeeft, is dit optioneel. Dit komt doordat de functie afhankelijk is van het XML-indelingsbestand om gegevens uit een gegevensbestand te lezen.

Opmerking

Een doeltabel is nodig met de opdracht bcp en de BULK INSERT instructie, die gebruikmaakt van de doeltabelkolommen om de typeconversie uit te voeren.

Structuur van XML-bestandformaten

Net als een bestand met een niet-XML-indeling definieert een XML-indelingsbestand de indeling en structuur van de gegevensvelden in een gegevensbestand en worden deze gegevensvelden toegewezen aan kolommen in één doeltabel.

Een XML-indelingsbestand heeft twee hoofdonderdelen: <RECORD> en <ROW>.

  • <RECORD> beschrijft de gegevens zoals deze zijn opgeslagen in het gegevensbestand.

    Elk <RECORD> element bevat een set van een of meer <FIELD> elementen. Deze elementen komen overeen met velden in het gegevensbestand. De basissyntaxis is als volgt:

    <RECORD>
        <FIELD .../> [ ...n ]
    </RECORD>
    

    Elk <FIELD> element beschrijft de inhoud van een specifiek gegevensveld. Een veld kan slechts worden toegewezen aan één kolom in de tabel. Niet alle velden moeten worden toegewezen aan kolommen.

    Een veld in een gegevensbestand kan een vaste/variabele lengte of een beëindigd teken hebben. Een veldwaarde kan worden weergegeven als: een teken (met behulp van weergave met één byte), een breed teken (met Unicode 2-byteweergave), een systeemeigen database-indeling of een bestandsnaam. Als een veldwaarde wordt weergegeven als bestandsnaam, verwijst de bestandsnaam naar het bestand dat de waarde van een BLOB-kolom in de doeltabel bevat.

  • <ROW> beschrijft hoe u gegevensrijen maakt uit een gegevensbestand wanneer de gegevens uit het bestand worden geïmporteerd in een SQL Server-tabel.

    Een <ROW> element bevat een set <COLUMN> elementen. Deze elementen komen overeen met tabelkolommen. De basissyntaxis is als volgt:

    <ROW>
        <COLUMN .../> [ ...n ]
    </ROW>
    

    Elk <COLUMN> element kan worden toegewezen aan slechts één veld in het gegevensbestand. De volgorde van de <COLUMN> elementen in het <ROW> element definieert de volgorde waarin de bulkbewerking deze retourneert. Het XML-indelingsbestand wijst elk <COLUMN> element een lokale naam toe die geen relatie heeft met de kolom in de doeltabel van een bulkimportbewerking.

Schemasyntaxis voor XML-indelingsbestanden

Deze sectie bevat een overzicht van de elementen en attributen van het XML-schema voor XML-bestanden. De syntaxis van een indelingsbestand is onafhankelijk van de richting van de bewerking; Dat wil gezegd, de syntaxis is hetzelfde voor bulkexport en bulkimport. In deze sectie wordt ook nagegaan hoe bulkimport gebruikmaakt van de <ROW> elementen en <COLUMN> hoe u de xsi:type waarde van een element in een gegevensset plaatst.

Als u wilt zien hoe de syntaxis overeenkomt met werkelijke XML-indelingsbestanden, raadpleegt u voorbeeldbestanden van de XML-indeling.

Opmerking

U kunt een indelingsbestand wijzigen zodat u bulksgewijs kunt importeren uit een gegevensbestand waarin het aantal en/of de volgorde van de velden verschilt van het aantal en/of de volgorde van tabelkolommen. Zie Bestanden opmaken voor het importeren of exporteren van gegevens (SQL Server)voor meer informatie.

Basissyntaxis van het XML-schema

Deze syntaxisinstructies geven alleen de elementen (<BCPFORMAT>, <RECORD>, <FIELD>, en <ROW>) en <COLUMN>de bijbehorende basiskenmerken weer.

Opmerking

Aanvullende kenmerken die zijn gekoppeld aan de waarde van de xsi:type in een <FIELD> of <COLUMN> element, worden verderop in dit artikel beschreven.

Schema-elementen

In deze sectie wordt het doel samengevat van elk element dat in het XML-schema wordt gedefinieerd voor XML-indelingsbestanden. De kenmerken worden verderop in dit artikel beschreven in afzonderlijke secties.

  • <BCPFORMAT>

    Het element format-file dat de recordstructuur van een bepaald gegevensbestand definieert en de bijbehorende correspondentie met de kolommen van een tabelrij in de tabel.

  • <RECORD .../>

    Hiermee definieert u een complex element dat een of meer <FIELD> elementen bevat. De volgorde waarin de velden in het indelingsbestand worden gedeclareerd, is de volgorde waarin deze velden worden weergegeven in het gegevensbestand.

  • <FIELD .../>

    Hiermee definieert u een veld in een gegevensbestand dat gegevens bevat. De kenmerken van dit element worden verderop in dit artikel besproken in kenmerken van het <FIELD> element.

  • <ROW .../>

    Hiermee definieert u een complex element dat een of meer <COLUMN> elementen bevat. De volgorde van de <COLUMN> elementen is onafhankelijk van de volgorde van <FIELD> elementen in een RECORD definitie. In plaats daarvan bepaalt de volgorde van de <COLUMN> elementen in een indelingsbestand de kolomvolgorde van de resulterende rijenset. Gegevensvelden worden geladen in de volgorde waarin de bijbehorende <COLUMN> elementen in het <COLUMN> element worden gedeclareerd. Zie Hoe bulkimport gebruikmaakt van het <ROW> element verderop in dit artikel voor meer informatie.

  • <COLUMN>

    Hiermee definieert u een kolom als een element (<COLUMN>). Elk <COLUMN> element komt overeen met een <FIELD> element (waarvan de id is opgegeven in het SOURCE kenmerk van het <COLUMN> element). De kenmerken van dit element worden verderop in dit artikel besproken in kenmerken van het <COLUMN> element. Zie ook hoe bulkimport gebruikmaakt van het <COLUMN> element, verderop in dit artikel.

  • </BCPFORMAT>

    Vereist om het indelingsbestand te beëindigen.

Kenmerken van het <FIELD> element

In deze sectie worden de kenmerken van het <FIELD> element beschreven, die worden samengevat in de volgende schemasyntaxis:

<FIELD
ID ="fieldID"
xsi:type ="fieldType"
[ LENGTH ="n" ]
[ PREFIX_LENGTH ="p" ]
[ MAX_LENGTH ="m" ]
[ COLLATION ="collationName" ]
[ TERMINATOR ="terminator" ]
/>

Elk <FIELD> element is onafhankelijk van de andere elementen. Een veld wordt beschreven in termen van de volgende kenmerken:

Veldattribuut Beschrijving Facultatief/
Verplicht
ID="fieldID" Hiermee geeft u de logische naam van het veld in het gegevensbestand. De id van een veld is de sleutel die wordt gebruikt om naar het veld te verwijzen.

<FIELD ID="fieldID" /> komt overeen met <COLUMN SOURCE="fieldID" />
Verplicht
xsi:type="fieldType" Dit is een XML-constructie (gebruikt als een kenmerk) die het type van het exemplaar van het element aangeeft. De waarde van fieldType bepaalt welke optionele attributen u in een bepaalde instantie nodig hebt. Vereist (afhankelijk van het gegevenstype)
LENGTH="n" Dit kenmerk definieert de lengte voor een exemplaar van een gegevenstype met een vaste lengte.

De waarde van n moet een positief geheel getal zijn.
Optioneel, tenzij vereist voor de xsi:type waarde
PREFIX_LENGTH="p" Dit kenmerk definieert de lengte van het voorvoegsel voor een binaire gegevensweergave. De PREFIX_LENGTH, p, moet een van de volgende waarden zijn: 1, 2, , 4of 8. Optioneel, tenzij vereist voor de xsi:type waarde
MAX_LENGTH="m" Dit kenmerk is het maximum aantal bytes dat in een bepaald veld kan worden opgeslagen. Zonder een doeltabel is de maximale lengte van de kolom niet bekend. Het MAX_LENGTH kenmerk beperkt de maximale lengte van een kolom met uitvoertekens, waardoor de opslag wordt beperkt die is toegewezen voor de kolomwaarde. Dit is vooral handig wanneer u de BULK optie van de OPENROWSET functie in een SELECT FROM clausule gebruikt.

De waarde van m moet een positief geheel getal zijn. De maximale lengte is standaard 8000 tekens voor een tekenkolom en 4000 tekens voor een nchar-kolom .
Optioneel
COLLATION="collationName" COLLATION is alleen toegestaan voor tekenvelden. Zie SQL Server-sorteringsnaam voor een lijst met sql Server-sorteringsnamen. Optioneel
TERMINATOR="terminator" Dit kenmerk geeft het eindteken van een gegevensveld aan. Het terminatorteken kan elk teken zijn. Het afsluitteken moet een uniek teken zijn dat geen deel uitmaakt van de gegevens.

Standaard is het veldeindteken het tabteken (weergegeven als \t). Als u een alineamarkering wilt weergeven, gebruikt u \r\n.
Dit kenmerk wordt alleen gebruikt met xsi:type karaktergegevens, waarvoor dit kenmerk vereist is.

  • xsi:type waarden van het <FIELD> element

    De xsi:type waarde is een XML-constructie (gebruikt als een kenmerk) waarmee het gegevenstype van een exemplaar van een element wordt geïdentificeerd. Voor meer informatie, zie de sectie De xsi:type-waarde in een gegevensset plaatsen in dit artikel.

    De xsi:type waarde van het <FIELD> element ondersteunt de volgende gegevenstypen.

    <FIELD> xsi:type waarden Vereiste XML-kenmerken
    voor gegevenstype
    Optionele XML-kenmerken
    voor gegevenstype
    NativeFixed LENGTH Geen.
    NativePrefix PREFIX_LENGTH MAX_LENGTH
    CharFixed LENGTH COLLATION
    NCharFixed LENGTH COLLATION
    CharPrefix PREFIX_LENGTH MAX_LENGTH, COLLATION
    NCharPrefix PREFIX_LENGTH MAX_LENGTH, COLLATION
    CharTerm TERMINATOR MAX_LENGTH, COLLATION
    NCharTerm TERMINATOR MAX_LENGTH, COLLATION

    Zie Gegevenstypen voor meer informatie over SQL Server-gegevenstypen.

  • Kenmerken van het <COLUMN> element

    In deze sectie worden de kenmerken van het <COLUMN> element beschreven, die worden samengevat in de volgende schemasyntaxis:

    <COLUMN
    SOURCE = "fieldID"
    NAME = "columnName"
    xsi:type = "columnType"
    [ LENGTH = "n" ]
    [ PRECISION = "n" ]
    [ SCALE = "value" ]
    [ NULLABLE = { "YES" | "NO" } ]
    />
    

    Een veld wordt toegewezen aan een kolom in de doeltabel met behulp van de volgende kenmerken:

    KOLOMkenmerk Beschrijving Facultatief/
    Verplicht
    SOURCE="fieldID" Hiermee geeft u de id op van het veld dat wordt toegewezen aan de kolom.

    <COLUMN SOURCE=fieldID"/> komt overeen met <FIELD ID=fieldID"/>
    Verplicht
    NAME="columnName" Geeft de naam op van de kolom in de gegevensrijen die worden vertegenwoordigd door het bestandsformaat. Deze kolomnaam wordt gebruikt om de kolom in de resultatenset te identificeren en deze moet niet overeenkomen met de kolomnaam die in de doeltabel wordt gebruikt. Verplicht
    xsi:type="ColumnType" Dit is een XML-constructie (gebruikt als een kenmerk) waarmee het gegevenstype van het exemplaar van het element wordt geïdentificeerd. De waarde van ColumnType bepaalt welke van de optionele kenmerken u nodig hebt in een bepaald exemplaar.

    Notitie: De mogelijke waarden van ColumnType en de bijbehorende kenmerken worden vermeld in de <COLUMN> elementtabel in de xsi:type-waarden van de <sectie KOLOMelement>.
    Optioneel
    LENGTH="n" Hiermee definieert u de lengte voor een exemplaar van een gegevenstype met een vaste lengte. LENGTH wordt alleen gebruikt wanneer xsi:type een tekenreeks gegevenstype is.

    De waarde van n moet een positief geheel getal zijn.
    Optioneel (alleen beschikbaar als het xsi:type een tekenreeksgegevenstype is)
    PRECISION="n" Geeft het aantal cijfers in een getal aan. Het getal 123,45 heeft bijvoorbeeld een precisie van 5.

    De waarde moet een positief geheel getal zijn.
    Optioneel (alleen beschikbaar als het xsi:type gegevenstype variabele-getal is)
    SCALE="int" Geeft het aantal cijfers rechts van het decimaalteken in een getal aan. Het getal 123,45 heeft bijvoorbeeld een schaal van 2.

    De waarde moet een geheel getal zijn.
    Optioneel (alleen beschikbaar als het xsi:type gegevenstype variabele-getal is)
    NULLABLE={ "JA" | "NEE" } Geeft aan of een kolom waarden kan aannemen NULL . Dit kenmerk is onafhankelijk van FIELDS. Als een kolom echter niet nullbaar is en een veld NULL opgeeft (door geen waarde op te geven), wordt er een runtime-fout weergegeven.

    Het NULLABLE kenmerk wordt alleen gebruikt als u een gewone SELECT FROM OPENROWSET(BULK...) instructie uitvoert.
    Optioneel (beschikbaar voor elk gegevenstype)

  • xsi:type waarden van het <COLUMN> element

    De xsi:type waarde is een XML-constructie (gebruikt als een kenmerk) waarmee het gegevenstype van een exemplaar van een element wordt geïdentificeerd. Verderop in deze sectie vindt u informatie over het gebruik van de waarde xsi:type in een gegevensset.

    Het <COLUMN> element ondersteunt systeemeigen SQL-gegevenstypen, als volgt:

    Typecategorie <COLUMN> gegevenstypen Vereiste XML-kenmerken
    voor gegevenstype
    Optionele XML-kenmerken
    voor gegevenstype
    Gerepareerd SQLBIT, SQLTINYINT, SQLSMALLINT, SQLINT, SQLBIGINT, SQLFLT4, SQLFLT8, SQLDATETIME, SQLDATETIM4, SQLDATETIM8, SQLMONEY, SQLMONEY4, SQLVARIANT, SQLUNIQUEID Geen. NULLABLE
    Variabel nummer SQLDECIMAL en SQLNUMERIC Geen. NULLABLE, PRECISION, SCALE
    Variabele datum en tijd SQLDATETIME2, SQLTIME, SQLDATETIMEOFFSET Geen. NULLABLE, SCALE
    LOB SQLIMAGE, CharLOB, SQLTEXT en SQLUDT Geen. NULLABLE
    Character LOB SQLNTEXT Geen. NULLABLE
    Binaire tekenreeks SQLBINARY en SQLVARYBIN Geen. NULLABLE, LENGTH
    Tekenreeks SQLCHAR, SQLVARYCHAR, SQLNCHAR en SQLNVARCHAR Geen. NULLABLE, LENGTH

    Belangrijk

    Als u SQLXML-gegevens bulksgewijs wilt exporteren of importeren, gebruikt u een van de volgende gegevenstypen in uw indelingsbestand: SQLCHAR of SQLVARYCHAR (de gegevens worden verzonden op de clientcodepagina of op de codepagina die wordt geïmpliceerd door de sortering), SQLNCHAR of SQLNVARCHAR (de gegevens worden verzonden als Unicode) of SQLBINARYSQLVARYBIN (de gegevens worden verzonden zonder conversie).

    Zie Gegevenstypen voor meer informatie over SQL Server-gegevenstypen.

Hoe bulkimport gebruikmaakt van het <ROW> element

Het <ROW> element wordt in sommige contexten genegeerd. Of het <ROW> element van invloed is op een bulkimportbewerking, is afhankelijk van de wijze waarop de bewerking wordt uitgevoerd:

  • De opdracht bcp

    Wanneer gegevens in een doeltabel worden geladen, negeert bcp het <ROW> onderdeel. In plaats daarvan worden gegevens geladen op basis van de kolomtypen van de doeltabel.

  • Transact-SQL instructies (BULK INSERT en OPENROWSET's bulksgewijs rijensetprovider)

    Wanneer u gegevens bulksgewijs importeert in een tabel, gebruiken Transact-SQL instructies het <ROW> onderdeel om de invoerrijset te genereren. Bovendien voeren Transact-SQL instructies de juiste typeconversies uit op basis van de kolomtypen die zijn opgegeven onder <ROW> en de bijbehorende kolom in de doeltabel. Als er een onjuiste overeenkomst bestaat tussen kolomtypen zoals opgegeven in het indelingsbestand en in de doeltabel, treedt er een extra typeconversie op. Deze extra typeconversie kan leiden tot enige discrepantie (oftewel, een verlies van precisie) in gedrag in BULK INSERT of OPENROWSET's bulk-rijensetprovider in vergelijking met bcp.

    Met de informatie in het <ROW> element kan een rij worden samengesteld zonder dat er aanvullende informatie nodig is. Daarom kunt u een rijenset genereren met behulp van een SELECT instructie (SELECT * FROM OPENROWSET(BULK <data-file> FORMATFILE=<xml-format-file>).

    Voor de OPENROWSET BULK component is een indelingsbestand vereist. Converteren van het gegevenstype van het veld naar het gegevenstype van een kolom is alleen beschikbaar met een XML-indelingsbestand.

Hoe bulkimport gebruikmaakt van het <COLUMN> element

Voor het importeren van data in bulk naar een tabel, worden de <COLUMN> elementen in een indelingsbestand gebruikt om een veld in een gegevensbestand toe te wijzen aan tabelkolommen door het volgende te specificeren:

  • De positie van elk veld binnen een rij in het gegevensbestand.

  • Het kolomtype, dat wordt gebruikt om het veldgegevenstype te converteren naar het gewenste kolomgegevenstype.

Als er geen kolom aan een veld is toegewezen, wordt het veld niet gekopieerd naar de gegenereerde rijen. Met dit gedrag kan een gegevensbestand rijen genereren met verschillende kolommen (in verschillende tabellen).

Voor het bulksgewijs exporteren van gegevens uit een tabel wijst elk <COLUMN> in het indelingsbestand de kolom van de invoertabelrij toe aan het bijbehorende veld in het uitvoergegevensbestand.

xsi:type De waarde in een gegevensset plaatsen

Wanneer een XML-document wordt gevalideerd via de XSD-taal (XML Schema Definition), wordt de xsi:type waarde niet in de gegevensset geplaatst. U kunt de informatie echter in de xsi:type gegevensset plaatsen door het XML-indelingsbestand te laden in een XML-document (bijvoorbeeld myDoc), zoals wordt geïllustreerd in het volgende codefragment:

...;
myDoc.LoadXml(xmlFormat);
XmlNodeList ColumnList = myDoc.GetElementsByTagName("COLUMN");
for (int i = 0; i < ColumnList.Count; i++)
{
    Console.Write($"COLUMN: xsi:type={ColumnList[i].Attributes["type",
        "http://www.w3.org/2001/XMLSchema-instance"].Value}\n");
}

Voorbeeld van XML-indelingsbestanden

Deze sectie bevat informatie over het gebruik van XML-indelingsbestanden in verschillende gevallen, waaronder een Adventure Works-voorbeeld.

Opmerking

In de gegevensbestanden die in de volgende voorbeelden worden weergegeven, geeft <tab> een tabteken aan in een gegevensbestand, en geeft <return> een regelterugloop aan.

De voorbeelden illustreren de belangrijkste aspecten van het gebruik van XML-bestanden, zoals hieronder:

Zie Een indelingsbestand maken met bcp (SQL Server) voor informatie over het maken van indelingsbestanden.

Eén. Orden velden voor tekengegevens op dezelfde manier als tabelkolommen

In het volgende voorbeeld ziet u een XML-indelingsbestand waarin een gegevensbestand met drie velden met tekengegevens wordt beschreven. Het indelingsbestand wijst het gegevensbestand toe aan een tabel die drie kolommen bevat. De gegevensvelden komen een-op-een overeen met de kolommen van de tabel.

  • Tabel (rij):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • Gegevensbestand (record):Age<tab>FirstName<tab>LastName<return>

Het volgende XML-indelingsbestand leest van het gegevensbestand naar de tabel.

In het <RECORD> element vertegenwoordigt het bestandsformaat de gegevenswaarden in alle drie de velden als karakters. Voor elk veld geeft het TERMINATOR kenmerk het eindteken aan dat volgt op de gegevenswaarde.

De gegevensvelden komen een-op-een overeen met de kolommen van de tabel. In het element wijst het <ROW> indelingsbestand de kolom Age toe aan het eerste veld, de kolom FirstName aan het tweede veld en de kolom LastName aan het derde veld.

<?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="\t"
            MAX_LENGTH="12" />
        <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="20" COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n"
            MAX_LENGTH="30"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT" />
        <COLUMN SOURCE="2" NAME="firstname" xsi:type="SQLVARYCHAR" />
        <COLUMN SOURCE="3" NAME="lastname" xsi:type="SQLVARYCHAR" />
    </ROW>
</BCPFORMAT>

Opmerking

Zie Een indelingsbestand maken met bcp (SQL Server) voor een gelijkwaardig AdventureWorks2022 voorbeeld.

B. Gegevensvelden en tabelkolommen verschillend ordenen

In het volgende voorbeeld ziet u een XML-indelingsbestand waarin een gegevensbestand met drie velden met tekengegevens wordt beschreven. Het indelingsbestand wijst het gegevensbestand toe aan een tabel die drie kolommen bevat die anders zijn gerangschikt dan de velden van het gegevensbestand.

  • Tabel (rij):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • Gegevensbestand (record):Age<tab>FirstName<tab>LastName<return>

In het <RECORD> element vertegenwoordigt het formatbestand de gegevenswaarden in alle drie de velden als tekens.

In het element wijst het <ROW> indelingsbestand de kolom Age toe aan het eerste veld, de kolom FirstName aan het derde veld en de kolom LastName aan het tweede veld.

<?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="\t"
            MAX_LENGTH="12" />
        <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="20"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n"
            MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT" />
        <COLUMN SOURCE="3" NAME="firstname" xsi:type="SQLVARYCHAR" />
        <COLUMN SOURCE="2" NAME="lastname" xsi:type="SQLVARYCHAR" />
    </ROW>
</BCPFORMAT>

Opmerking

Zie Een indelingsbestand gebruiken om tabelkolommen toe te wijzen aan gegevensbestandsvelden (SQL Server) voor een gelijkwaardig AdventureWorks2022 voorbeeld.

C. Een gegevensveld weglaten

In het volgende voorbeeld ziet u een XML-indelingsbestand waarin een gegevensbestand met vier velden met tekengegevens wordt beschreven. Het indelingsbestand wijst het gegevensbestand toe aan een tabel die drie kolommen bevat. Het tweede gegevensveld komt niet overeen met een tabelkolom.

  • Tabel (rij):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • Gegevensbestand (record):Age<tab>FirstName<tab>LastName<return>

In het element vertegenwoordigt het <RECORD> indelingsbestand de gegevenswaarden in alle vier de velden als tekengegevens. Voor elk veld geeft het TERMINATOR kenmerk het eindteken aan dat volgt op de gegevenswaarde.

In het <ROW> element wijst het indelingsbestand de kolom Age toe aan het eerste veld, de kolom FirstName aan het derde veld en de kolom LastName aan het vierde veld.

<?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="\t"
            MAX_LENGTH="12" />
        <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="10"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\t"
            MAX_LENGTH="20"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
        <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n"
            MAX_LENGTH="30"
            COLLATION="SQL_Latin1_General_CP1_CI_AS" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT" />
        <COLUMN SOURCE="3" NAME="firstname" xsi:type="SQLVARYCHAR" />
        <COLUMN SOURCE="4" NAME="lastname" xsi:type="SQLVARYCHAR" />
    </ROW>
</BCPFORMAT>

Opmerking

Zie Een indelingsbestand gebruiken om een gegevensveld (SQL Server) over te slaan voor een gelijkwaardig AdventureWorks2022 voorbeeld.

D. Kaart <FIELD> xsi:type naar <COLUMN> xsi:type

In het volgende voorbeeld ziet u verschillende typen velden en hun toewijzingen aan kolommen.

<?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 xsi:type="CharTerm" ID="C1" TERMINATOR="\t"
            MAX_LENGTH="4" />
        <FIELD xsi:type="CharFixed" ID="C2" LENGTH="10"
            COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="CharPrefix" ID="C3" PREFIX_LENGTH="2"
            MAX_LENGTH="32" COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="NCharTerm" ID="C4" TERMINATOR="\t"
            MAX_LENGTH="4" />
        <FIELD xsi:type="NCharFixed" ID="C5" LENGTH="10"
            COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="NCharPrefix" ID="C6" PREFIX_LENGTH="2"
            MAX_LENGTH="32" COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
        <FIELD xsi:type="NativeFixed" ID="C7" LENGTH="4" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="C1" NAME="Age" xsi:type="SQLTINYINT" />
        <COLUMN SOURCE="C2" NAME="FirstName" xsi:type="SQLVARYCHAR"
            LENGTH="16" NULLABLE="NO" />
        <COLUMN SOURCE="C3" NAME="LastName" />
        <COLUMN SOURCE="C4" NAME="Salary" xsi:type="SQLMONEY" />
        <COLUMN SOURCE="C5" NAME="Picture" xsi:type="SQLIMAGE" />
        <COLUMN SOURCE="C6" NAME="Bio" xsi:type="SQLTEXT" />
        <COLUMN SOURCE="C7" NAME="Interest" xsi:type="SQLDECIMAL"
            PRECISION="5" SCALE="3" />
    </ROW>
</BCPFORMAT>

E. XML-gegevens toewijzen aan een tabel

In het volgende voorbeeld wordt een lege tabel met twee kolommen (t_xml) gemaakt, waarin de eerste kolom wordt toegewezen aan het int gegevenstype en de tweede kolom wordt toegewezen aan het xml gegevenstype.

CREATE TABLE t_xml (c1 INT, c2 XML);

Met het volgende XML-indelingsbestand wordt een gegevensbestand in de tabel t_xmlgeladen.

<?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" PREFIX_LENGTH="1" />
        <FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="8" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="c1" xsi:type="SQLINT" />
        <COLUMN SOURCE="2" NAME="c2" xsi:type="SQLNCHAR" />
    </ROW>
</BCPFORMAT>

F. Velden met vaste lengte of vaste breedte importeren

In het volgende voorbeeld worden vaste velden van 10 of 6 tekens beschreven. Het indelingsbestand vertegenwoordigt deze veldlengten/breedten als LENGTH="10" en respectievelijk LENGTH="6". Elke rij van de gegevensbestanden eindigt met een combinatie van regelterugloopfeeds, <CR><LF>die het indelingsbestand vertegenwoordigt als TERMINATOR="\r\n".

<?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="CharFixed" LENGTH="10" />
        <FIELD ID="2" xsi:type="CharFixed" LENGTH="6" />
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" />
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="C1" xsi:type="SQLINT" />
        <COLUMN SOURCE="2" NAME="C2" xsi:type="SQLINT" />
    </ROW>
</BCPFORMAT>

Aanvullende voorbeelden

Voor voorbeelden van niet-XML-bestanden en XML-bestanden, zie de volgende artikelen.