Dela via


XML-formatfiler (SQL Server)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

SQL Server innehåller ett XML-schema som definierar syntax för att skriva XML-formatfiler som ska användas för massimport av data till en SQL Server-tabell. XML-formatfiler måste följa det här schemat, som definieras i XML Schema Definition Language (XSDL). XML-formatfiler stöds endast när SQL Server-verktyg installeras tillsammans med SQL Server Native Client.

Du kan använda en XML-formatfil med ett bcp-kommando , BULK INSERT -instruktion eller INSERT ... SELECT * FROM OPENROWSET(BULK...) -uttryck. Med bcp-kommandot kan du automatiskt generera en XML-formatfil för en tabell. Mer information finns i bcp-verktyget.

Två typer av formatfiler stöds för massexport och import: icke-XML-formatfiler och XML-formatfiler. XML-formatfiler är ett flexibelt och kraftfullt alternativ till filer som inte är XML-format. Information om filer som inte är XML-format finns i Använda filer som inte är XML-format (SQL Server).

Anmärkning

Den här syntaxen, inklusive massinfogning, stöds inte i Azure Synapse Analytics. I Azure Synapse Analytics och andra molndatabasplattformsintegreringar utför du dataflytt via COPY-instruktionen i Azure Data Factory eller med hjälp av T-SQL-instruktioner som COPY INTO och PolyBase.

Fördelar med XML-formatfiler

XML-formatfiler är självbeskrivande, vilket gör dem enkla att läsa, skapa och utöka. De är läsbara för människor, vilket gör det enkelt att förstå hur data tolkas under massåtgärder.

XML-formatfiler innehåller datatyperna för målkolumner. XML-kodningen beskriver tydligt datatyperna och dataelementen i datafilen och även mappningen mellan dataelement och tabellkolumner.

Detta möjliggör separation mellan hur data representeras i datafilen och vilken datatyp som är associerad med varje fält i filen. Om en datafil till exempel innehåller en teckenrepresentation av data går motsvarande SQL-kolumntyp förlorad.

En XML-formatfil gör det möjligt att läsa in ett fält som innehåller en enda stor objektdatatyp (LOB) från en datafil.

En XML-formatfil kan förbättras men förblir kompatibel med tidigare versioner. Dessutom underlättar tydligheten i XML-kodning skapandet av flera formatfiler för en viss datafil. Detta är användbart om du måste mappa alla eller vissa datafält till kolumner i olika tabeller eller vyer.

XML-syntaxen är oberoende av åtgärdens riktning. Syntaxen är alltså densamma för massexport och massimport.

Du kan använda XML-formatfiler för att massimportera data till tabeller eller icke-partitionerade vyer och massexportera data.

För funktionen OPENROWSET(BULK...) är det valfritt att ange en måltabell. Det beror på att funktionen förlitar sig på XML-formatfilen för att läsa data från en datafil.

Anmärkning

En måltabell krävs med bcp-kommandot och -instruktionen BULK INSERT , som använder måltabellkolumnerna för att utföra typkonverteringen.

Strukturen för XML-formatfiler

Precis som en icke-XML-formatfil definierar en XML-formatfil formatet och strukturen för datafälten i en datafil och mappar dessa datafält till kolumner i en enda måltabell.

En XML-formatfil har två huvudkomponenter och <RECORD><ROW>:

  • <RECORD> beskriver data som de lagras i datafilen.

    Varje <RECORD> element innehåller en uppsättning med ett eller flera <FIELD> element. Dessa element motsvarar fält i datafilen. Den grundläggande syntaxen är följande:

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

    Varje <FIELD> element beskriver innehållet i ett specifikt datafält. Ett fält kan bara mappas till en kolumn i tabellen. Alla fält behöver inte mappas till kolumner.

    Ett fält i en datafil kan ha en fast/variabel längd eller ett tecken som avslutas. Ett fältvärde kan representeras som: ett tecken (med en bytesrepresentation), ett brett tecken (med Unicode 2-bytesrepresentation), inbyggt databasformat eller ett filnamn. Om ett fältvärde representeras som ett filnamn pekar filnamnet på filen som innehåller värdet för en BLOB-kolumn i måltabellen.

  • <ROW> beskriver hur du konstruerar datarader från en datafil när data från filen importeras till en SQL Server-tabell.

    Ett <ROW> element innehåller en uppsättning <COLUMN> element. Dessa element motsvarar tabellkolumner. Den grundläggande syntaxen är följande:

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

    Varje <COLUMN> element kan endast mappas till ett fält i datafilen. Ordningen på elementen <COLUMN> i elementet <ROW> definierar i vilken ordning massåtgärden returnerar dem. XML-formatfilen tilldelar varje <COLUMN> element ett lokalt namn som inte har någon relation till kolumnen i måltabellen för en massimportåtgärd.

Schemasyntax för XML-formatfiler

Det här avsnittet innehåller en sammanfattning av elementen och attributen i XML-schemat för XML-formatfiler. Syntaxen för en formatfil är oberoende av åtgärdens riktning. Syntaxen är alltså densamma för massexport och massimport. I det här avsnittet beskrivs även hur massimport använder elementen <ROW> och <COLUMN> och hur värdet för ett element ska placeras xsi:type i en datauppsättning.

Information om hur syntaxen motsvarar faktiska XML-formatfiler finns i XML-exempelformatfiler.

Anmärkning

Du kan ändra en formatfil så att du kan massimportera från en datafil där fältens nummer och/eller ordning skiljer sig från antalet och/eller ordningen för tabellkolumner. Mer information finns i Formatera filer för att importera eller exportera data (SQL Server).

Grundläggande syntax för XML-schemat

Dessa syntaxinstruktioner visar endast elementen (<BCPFORMAT>, <RECORD>, <FIELD>, <ROW>och <COLUMN>) och deras grundläggande attribut.

Anmärkning

Ytterligare attribut som är associerade med värdet xsi:type för i ett <FIELD> eller <COLUMN> -element beskrivs senare i den här artikeln.

Elemente i schemat

Det här avsnittet sammanfattar syftet med varje element som XML-schemat definierar för XML-formatfiler. Attributen beskrivs i separata avsnitt senare i den här artikeln.

  • <BCPFORMAT>

    Formatfilelementet som definierar poststrukturen för en viss datafil och dess motsvarighet till kolumnerna i en tabellrad.

  • <RECORD .../>

    Definierar ett komplext element som innehåller ett eller flera <FIELD> element. Ordningen i vilken fälten deklareras i formatfilen är den ordning i vilken fälten visas i datafilen.

  • <FIELD .../>

    Definierar ett fält i datafilen som innehåller data. Attributen för det här elementet beskrivs i Attribut för elementet senare i den <FIELD>här artikeln.

  • <ROW .../>

    Definierar ett komplext element som innehåller ett eller flera <COLUMN> element. Ordningen på elementen <COLUMN> är oberoende av <FIELD> ordningen på elementen i en RECORD definition. I stället avgör ordningen på elementen <COLUMN> i en formatfil kolumnordningen för den resulterande raduppsättningen. Datafält läses in i den ordning motsvarande <COLUMN> element deklareras i elementet <COLUMN>. Mer information finns i Hur massimport använder elementet <ROW>senare i den här artikeln.

  • <COLUMN>

    Definierar en kolumn som ett element (<COLUMN>). Varje <COLUMN> element motsvarar ett <FIELD> element (vars ID anges i SOURCE elementets <COLUMN> attribut). Attributen för det här elementet beskrivs i Attribut för elementet senare i den <COLUMN>här artikeln. Se även Hur massimport använder elementet <COLUMN>senare i den här artikeln.

  • </BCPFORMAT>

    Krävs för att avsluta formatfilen.

Attributen hos <FIELD>-elementet

I det här avsnittet beskrivs elementets <FIELD> attribut, som sammanfattas i följande schemasyntax:

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

Varje <FIELD> element är oberoende av de andra. Ett fält beskrivs i termer av följande attribut:

FIELD-attribut Beskrivning Valfri/
Krävs
ID="fieldID" Anger det logiska namnet på fältet i datafilen. ID:t för ett fält är nyckeln som används för att referera till fältet.

<FIELD ID="fieldID" /> maps to <COLUMN SOURCE="fieldID" />
Krävs
xsi:type="fieldType" Det här är en XML-konstruktion (används som ett attribut) som identifierar typen av instans av elementet. Värdet för fieldType avgör vilka av de valfria attribut du behöver i en viss instans. Krävs (beroende på datatyp)
LENGTH="n" Det här attributet definierar längden för en instans av en datatyp med fast längd.

Värdet för n måste vara ett positivt heltal.
Valfritt om det inte krävs av xsi:type värdet
PREFIX_LENGTH="p" Det här attributet definierar prefixets längd för en binär datarepresentation. , PREFIX_LENGTHp, måste vara något av följande värden: 1, 2, 4, eller 8. Valfritt om det inte krävs av xsi:type värdet
MAX_LENGTH="m" Det här attributet är det maximala antalet byte som kan lagras i ett visst fält. Utan en måltabell är kolumnens maxlängd inte känd. Attributet MAX_LENGTH begränsar den maximala längden på en utdatateckenkolumn, vilket begränsar det allokerade lagringsutrymmet för kolumnvärdet. Detta är särskilt praktiskt när du använder OPENROWSET funktionens BULK val i en SELECT FROM sats.

Värdet för m måste vara ett positivt heltal. Som standard är den maximala längden 8 000 tecken för en teckenkolumn och 4 000 tecken för en nchar-kolumn .
Valfritt
COLLATION="collationName" COLLATION tillåts endast för teckenfält. En lista över SQL Server-sorteringsnamn finns i SQL Server-sorteringsnamn. Valfritt
TERMINATOR="terminator" Det här attributet anger avslutaren för ett datafält. Terminatorn kan vara vilket tecken som helst. Terminatorn måste vara ett unikt tecken som inte är en del av den använda datan.

Som standard är fältavslutaren fliktecknet (representeras som \t). Om du vill representera ett styckemärke använder du \r\n.
Det här attributet används endast med en xsi:type av teckendata, och kräver därför det här attributet.

  • xsi:type elementets <FIELD> värden

    Värdet xsi:type är en XML-konstruktion (används som ett attribut) som identifierar datatypen för en instans av ett element. Mer information finns i Placera värdet xsi:type i ett datauppsättningsavsnitt i den här artikeln.

    Värdet xsi:type för elementet <FIELD> stöder följande datatyper.

    <FIELD> xsi:type värden Obligatoriska XML-attribut
    för datatyp
    Valfria XML-attribut
    för datatyp
    NativeFixed LENGTH Ingen.
    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

    Mer information om SQL Server-datatyper finns i Datatyper.

  • Elementets <COLUMN> attribut

    I det här avsnittet beskrivs elementets <COLUMN> attribut, som sammanfattas i följande schemasyntax:

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

    Ett fält mappas till en kolumn i måltabellen med hjälp av följande attribut:

    KOLUMN-attribut Beskrivning Valfri/
    Krävs
    SOURCE="fieldID" Anger ID för fältet som mappas till kolumnen.

    <COLUMN SOURCE=fieldID"/> mappar till <FIELD ID=fieldID"/>
    Krävs
    NAME="columnName" Anger namnet på kolumnen i raduppsättningen som representeras av formatfilen. Det här kolumnnamnet används för att identifiera kolumnen i resultatuppsättningen och behöver inte motsvara kolumnnamnet som används i måltabellen. Krävs
    xsi:type="ColumnType" Det här är en XML-konstruktion (används som ett attribut) som identifierar datatypen för elementets instans. Värdet för ColumnType avgör vilka av de valfria attribut du behöver i en viss instans.

    Not: Möjliga värden för ColumnType och deras associerade attribut visas i elementtabellen <COLUMN> i xsi:type-värdena i <avsnittet COLUMN-element>.
    Valfritt
    LENGTH="n" Definierar längden för en instans av en datatyp med fast längd. LENGTH används endast när xsi:type är en strängdatatyp.

    Värdet för n måste vara ett positivt heltal.
    Valfritt (endast tillgängligt om xsi:type är en strängdatatyp)
    PRECISION="n" Anger antalet siffror i ett tal. Till exempel har talet 123,45 en precision på 5.

    Värdet måste vara ett positivt heltal.
    Valfritt (endast tillgängligt om xsi:type datatypen är ett variabelnummer)
    SCALE="int" Anger antalet siffror till höger om decimaltecknet i ett tal. Till exempel har talet 123,45 en skala på 2.

    Värdet måste vara ett heltal.
    Valfritt (endast tillgängligt om xsi:type datatypen är ett variabelnummer)
    NULLABLE={ "JA" | "NEJ" } Anger om en kolumn kan anta NULL värden. Det här attributet är oberoende av FIELDS. Men om en kolumn inte är nullbar och fältet anger NULL (genom att inte ange något värde), resulterar ett körningsfel.

    Attributet NULLABLE används endast om du gör en vanlig SELECT FROM OPENROWSET(BULK...) instruktion.
    Valfritt (tillgängligt för alla datatyper)

  • xsi:type elementets <COLUMN> värden

    Värdet xsi:type är en XML-konstruktion (används som ett attribut) som identifierar datatypen för en instans av ett element. Mer information om hur du använder "Placera värdet xsi:type i en datauppsättning" finns senare i det här avsnittet.

    Elementet <COLUMN> stöder inbyggda SQL-datatyper enligt följande:

    Typkategori <COLUMN> datatyper Obligatoriska XML-attribut
    för datatyp
    Valfria XML-attribut
    för datatyp
    Åtgärdad (based on the most likely sense of "Fixed" in common contexts where it means 'repaired' or 'resolved'). SQLBIT, SQLTINYINT, SQLSMALLINT, SQLINT, SQLBIGINT, SQLFLT4, SQLFLT8, SQLDATETIME, SQLDATETIM4, , SQLDATETIM8, SQLMONEY, SQLMONEY4, SQLVARIANToch SQLUNIQUEID Ingen. NULLABLE
    Variabelnummer SQLDECIMAL och SQLNUMERIC Ingen. NULLABLE, PRECISION, SCALE
    Variabeldatum och -tid SQLDATETIME2, SQLTIME, SQLDATETIMEOFFSET Ingen. NULLABLE, SCALE
    LOB SQLIMAGE, CharLOB, SQLTEXToch SQLUDT Ingen. NULLABLE
    Character LOB SQLNTEXT Ingen. NULLABLE
    Binär sträng SQLBINARY och SQLVARYBIN Ingen. NULLABLE, LENGTH
    Teckensträng SQLCHAR, SQLVARYCHAR, SQLNCHARoch SQLNVARCHAR Ingen. NULLABLE, LENGTH

    Viktigt!

    Om du vill massexportera eller importera SQLXML-data använder du någon av följande datatyper i formatfilen: SQLCHAR eller SQLVARYCHAR (data skickas på klientkodsidan eller på den kodsida som är underförstådd av sorteringen), SQLNCHAR eller SQLNVARCHAR (data skickas som Unicode) eller SQLBINARYSQLVARYBIN (data skickas utan konvertering).

    Mer information om SQL Server-datatyper finns i Datatyper.

Hur massimport använder elementet <ROW>

Elementet <ROW> ignoreras i vissa kontexter. Om elementet <ROW> påverkar en massimportåtgärd beror på hur åtgärden utförs:

  • Bcp-kommandot

    När data läses in i en måltabell ignorerar bcp komponenten <ROW> . I stället läser bcp in data baserat på kolumntyperna i måltabellen.

  • Transact-SQL -instruktioner (BULK INSERT och OPENROWSETmassraduppsättningsprovidern)

    När du massimporterar data till en tabell använder Transact-SQL-uttryck komponenten <ROW> för att generera indataraduppsättningen. Dessutom utför Transact-SQL-instruktioner lämpliga typkonverteringar baserat på de kolumntyper som anges under <ROW> och motsvarande kolumn i måltabellen. Om det finns ett matchningsfel mellan kolumntyper som anges i formatfilen och i måltabellen sker en extra typkonvertering. Den här extra typkonverteringen kan leda till en viss avvikelse (dvs. en förlust av precision) i beteendet hos BULK INSERT eller OPENROWSETmassraduppsättningsprovidern jämfört med bcp.

    Informationen i elementet <ROW> gör att en rad kan konstrueras utan ytterligare information. Därför kan du generera en raduppsättning med hjälp av en SELECT -instruktion (SELECT * FROM OPENROWSET(BULK <data-file> FORMATFILE=<xml-format-file>).

    Satsen OPENROWSET BULK kräver en formatfil. Konvertering från datatypen för fältet till datatypen för en kolumn är endast tillgängligt med en XML-formatfil.

Hur massimport använder elementet <COLUMN>

För massimport av data till en tabell mappar elementen <COLUMN> i en formatfil ett datafilfält till tabellkolumner genom att ange:

  • Positionen för varje fält i en rad i datafilen.

  • Kolumntypen, som används för att konvertera fältdatatypen till önskad kolumndatatyp.

Om ingen kolumn mappas till ett fält kopieras inte fältet till de genererade raderna. Med det här beteendet kan en datafil generera rader med olika kolumner (i olika tabeller).

För massexport av data från en tabell kartlägger varje <COLUMN> i formatfilen kolumnen från inmatningstabellraden till motsvarande fält i utdatafilen.

Placera värdet xsi:type i en datauppsättning

När ett XML-dokument verifieras via språket xsi:type XML-schemadefinition (XSD) placeras inte värdet i datauppsättningen. Du kan dock placera informationen xsi:type i datauppsättningen genom att läsa in XML-formatfilen i ett XML-dokument (till exempel myDoc), enligt följande kodfragment:

...;
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");
}

Exempel på XML-formatfiler

Det här avsnittet innehåller information om hur du använder XML-formatfiler i olika fall, inklusive ett Adventure Works-exempel.

Anmärkning

I de datafiler som visas i följande exempel <tab> anger ett fliktecken i en datafil och <return> anger en vagnretur.

Exemplen illustrerar viktiga aspekter av hur du använder XML-formatfiler på följande sätt:

Information om hur du skapar formatfiler finns i Skapa en formatfil med bcp (SQL Server).

A. Sortera teckendatafält på samma sätt som tabellkolumner

I följande exempel visas en XML-formatfil som beskriver en datafil som innehåller tre fält med teckendata. Formatfilen mappar datafilen till en tabell som innehåller tre kolumner. Datafälten motsvarar en-till-en med kolumnerna i tabellen.

  • Tabell (rad):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • Datafil (post):Age<tab>FirstName<tab>LastName<return>

Följande XML-formatfil läser från datafilen till tabellen.

I elementet <RECORD> representerar formatfilen datavärdena i alla tre fälten som teckendata. För varje fält TERMINATOR anger attributet den avslutare som följer datavärdet.

Datafälten motsvarar varje kolumn i tabellen. I -elementet <ROW> mappar formatfilen kolumnen Age till det första fältet, kolumnen FirstName till det andra fältet och kolumnen LastName till det tredje fältet.

<?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>

Anmärkning

Ett motsvarande AdventureWorks2022 exempel finns i Skapa en formatfil med bcp (SQL Server).

B. Sortera datafält och tabellkolumner på olika sätt

I följande exempel visas en XML-formatfil som beskriver en datafil som innehåller tre fält med teckendata. Formatfilen mappar datafilen till en tabell som innehåller tre kolumner som sorteras på ett annat sätt än datafilens fält.

  • Tabell (rad):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • Datafil (post):Age<tab>FirstName<tab>LastName<return>

I elementet <RECORD> representerar formatfilen datavärdena i alla tre fälten som teckendata.

I -elementet <ROW> mappar formatfilen kolumnen Age till det första fältet, kolumnen FirstName till det tredje fältet och kolumnen LastName till det andra fältet.

<?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>

Anmärkning

Ett motsvarande AdventureWorks2022 exempel finns i Använda en formatfil för att mappa tabellkolumner till datafilfält (SQL Server).

C. Utelämna ett datafält

I följande exempel visas en XML-formatfil som beskriver en datafil som innehåller fyra fält med teckendata. Formatfilen mappar datafilen till en tabell som innehåller tre kolumner. Det andra datafältet motsvarar inte någon tabellkolumn.

  • Tabell (rad):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • Datafil (post):Age<tab>FirstName<tab>LastName<return>

I elementet <RECORD> representerar formatfilen datavärdena i alla fyra fälten som teckendata. För varje fält TERMINATOR anger attributet den avslutare som följer datavärdet.

I -elementet <ROW> mappar formatfilen kolumnen Age till det första fältet, kolumnen FirstName till det tredje fältet och kolumnen LastName till det fjärde fältet.

<?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>

Anmärkning

Ett motsvarande AdventureWorks2022 exempel finns i Använda en formatfil för att hoppa över ett datafält (SQL Server).

D. Mappa xsi:type <FIELD> till xsi:type <COLUMN>

I följande exempel visas olika typer av fält och deras mappningar till kolumner.

<?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. Mappa XML-data till en tabell

I följande exempel skapas en tom tabell med två kolumner (t_xml), där den första kolumnen mappar till int datatypen och den andra kolumnen mappar till xml datatypen.

CREATE TABLE t_xml (c1 INT, c2 XML);

Följande XML-formatfil skulle läsa in en datafil i tabellen t_xml.

<?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. Importera fält med fast längd eller fast bredd

I följande exempel beskrivs fasta fält med 10 eller 6 tecken var och en. Formatfilen representerar dessa fältlängder/bredder som LENGTH="10" respektive LENGTH="6". Varje rad i datafilerna slutar med en vagnreturradsflödeskombination, <CR><LF>, som formatfilen representerar som 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>

Ytterligare exempel

Fler exempel på både icke-XML-formatfiler och XML-formatfiler finns i följande artiklar: