Megosztás a következőn keresztül:


XML-formátumfájlok (SQL Server)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Az SQL Server egy XML-sémát biztosít, amely szintaxist határoz meg XML-formátumú fájlok írásához, adatok SQL Server-táblába történő tömeges importálásához. Az XML-formátumfájloknak be kell tartaniuk ezt a sémát, amelyet az XML-sémadefiníciós nyelv (XSDL) határoz meg. Az XML-formátumú fájlok csak akkor támogatottak, ha az SQL Server-eszközök az SQL Server natív ügyféllel együtt vannak telepítve.

Xml formátumú fájlokat használhat bcp paranccsal, BULK INSERT utasítással vagy INSERT ... SELECT * FROM OPENROWSET(BULK...) utasítással. A bcp paranccsal automatikusan létrehozhat egy XML-formátumfájlt egy táblához; További információ: bcp segédprogram.

A formátumfájlok kétféle formátumfájlt támogatnak a tömeges exportáláshoz és importáláshoz: nem XML formátumú fájlokat és XML formátumú fájlokat. Az XML-formátumú fájlok rugalmas és hatékony alternatívát nyújtanak a nem XML formátumú fájlok helyett. A nem XML formátumú fájlokról további információt a Nem XML formátumú fájlok (SQL Server)című témakörben talál.

Jegyzet

Ez a szintaxis, beleértve a tömeges beszúrást, nem támogatott az Azure Synapse Analyticsben. Az Azure Synapse Analyticsben és más felhőalapú adatbázisplatform-integrációkban az adatáthelyezést az Azure Data Factory COPY utasításánakvagy T-SQL-utasítások, például a COPY INTO és a PolyBasehasználatával végezheti el.

Az XML-formátumfájlok előnyei

Az XML-formátumú fájlok önleírók, így könnyen olvashatók, hozhatók létre és bővíthetőek. Az adatok emberi olvashatók, így könnyen megérthetők az adatok tömeges műveletek során történő értelmezése.

Az XML-formátumú fájlok a céloszlopok adattípusait tartalmazzák. Az XML-kódolás egyértelműen leírja az adatfájl adattípusait és adatelemét, valamint az adatelemek és a táblaoszlopok közötti leképezést.

Ez lehetővé teszi az adatok adatfájlban való ábrázolásának és a fájl egyes mezőihez társított adattípus közötti elkülönítést. Ha például egy adatfájl az adatok karakterábrázolását tartalmazza, a megfelelő SQL-oszloptípus elveszik.

Az XML-formátumú fájlok lehetővé teszik egy olyan mező betöltését, amely egyetlen nagy objektumtípust (LOB) tartalmaz egy adatfájlból.

Az XML-formátumú fájlok bővíthetők, de kompatibilisek maradnak a korábbi verziókkal. Ezenkívül az XML-kódolás egyértelműsége lehetővé teszi több formátumfájl létrehozását egy adott adatfájlhoz. Ez akkor hasznos, ha az összes vagy néhány adatmezőt különböző táblák vagy nézetek oszlopaihoz kell hozzárendelnie.

Az XML-szintaxis független a művelet irányától; vagyis a szintaxis megegyezik a tömeges exportálás és a tömeges importálás esetében.

XML formátumú fájlok használatával tömegesen importálhat adatokat táblákba vagy nem particionált nézetekbe, és tömegesen exportálhat adatokat.

A OPENROWSET(BULK...) függvény esetében a céltábla megadása nem kötelező. Ennek az az oka, hogy a függvény az XML formátumfájlra támaszkodik az adatok adatfájlból való beolvasásához.

Jegyzet

A céltáblára a bcp paranccsal és a BULK INSERT utasítással van szükség, amely a céltábla oszlopaival hajtja végre a típusátalakítást.

XML-formátumfájlok felépítése

A nem XML formátumú fájlokhoz hasonlóan az XML-formátumú fájlok is meghatározzák az adatfájlok adatmezőinek formátumát és szerkezetét, és az adatmezőket egyetlen céltábla oszlopaihoz rendelik.

Az XML-formátumú fájlok két fő összetevőből állnak, <RECORD> és <ROW>:

  • <RECORD> az adatfájlban tárolt adatokat írja le.

    Minden <RECORD> elem egy vagy több <FIELD> elemet tartalmaz. Ezek az elemek az adatfájl mezőinek felelnek meg. Az alapszintaxis a következő:

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

    Minden <FIELD> elem egy adott adatmező tartalmát írja le. Egy mező csak a tábla egy oszlopára képezhető le. Nem minden mezőt kell oszlopokra leképezni.

    Egy adatfájl mezője lehet rögzített/változó hosszúságú vagy karakterrel végződő. A mezőértékek a következőkként jelölhetők: karakter (egy bájtos ábrázolás), széles karakter (Unicode 2 bájtos ábrázolás használatával), natív adatbázisformátum vagy fájlnév. Ha egy mezőérték fájlnévként van ábrázolva, a fájlnév arra a fájlra mutat, amely a céltábla BLOB-oszlopának értékét tartalmazza.

  • <ROW> azt ismerteti, hogyan hozhat létre adatsorokat egy adatfájlból, amikor a fájlból származó adatokat importálja egy SQL Server-táblába.

    A <ROW> elem egy <COLUMN> elemkészletet tartalmaz. Ezek az elemek táblázatoszlopoknak felelnek meg. Az alapszintaxis a következő:

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

    Minden <COLUMN> elem csak egy mezőre képezhető le az adatfájlban. A <COLUMN> elem <ROW> elemeinek sorrendje határozza meg, hogy a tömeges művelet milyen sorrendben adja vissza őket. Az XML-formátumfájl minden <COLUMN> elemet egy helyi névhez rendel, amely nincs kapcsolatban a tömeges importálási művelet céltáblájának oszlopával.

Xml-formátumú fájlok sémaszintaxisa

Ez a szakasz az XML-formátumfájlok XML-sémájának elemeit és attribútumait tartalmazza. A formátumfájl szintaxisa független a művelet irányától; vagyis a szintaxis megegyezik a tömeges exportálás és a tömeges importálás esetében. Ez a szakasz azt is figyelembe veszi, hogy a tömeges importálás hogyan használja a <ROW> és <COLUMN> elemeket, és hogyan helyezheti egy elem xsi:type értékét egy adatkészletbe.

Ha meg szeretné tudni, hogy a szintaxis hogyan felel meg a tényleges XML-formátumú fájloknak, tekintse meg minta XML-formátumfájlokat.

Jegyzet

Módosíthatja a formátumfájlt, hogy tömegesen importálhasson olyan adatfájlból, amelyben a mezők száma és/vagy sorrendje eltér a táblaoszlopok számától és/vagy sorrendjétől. További információ: Fájlok formázása adatok importálásához vagy exportálásához (SQL Server).

Az XML-séma alapszintaxisa

Ezek a szintaxisutasságok csak az elemeket (<BCPFORMAT>, <RECORD>, <FIELD>, <ROW>és <COLUMN>) és azok alapvető attribútumait jelenítik meg.

Jegyzet

Az xsi:type vagy <FIELD> elem <COLUMN> értékéhez kapcsolódó további attribútumokat a cikk későbbi részében ismertetjük.

Sémaelemek

Ez a szakasz összefoglalja az XML-séma által az XML-formátumfájlokhoz definiált egyes elemek célját. Az attribútumokat a cikk későbbi részében külön szakaszokban ismertetjük.

  • <BCPFORMAT>

    Egy adott adatfájl rekordstruktúráját meghatározó formátumfájl-elem, valamint annak a táblasor oszlopaival való megfeleltetése.

  • <RECORD .../>

    Egy vagy több <FIELD> elemet tartalmazó összetett elemet definiál. A formátumfájlban a mezők deklarálásának sorrendje az a sorrend, amelyben ezek a mezők megjelennek az adatfájlban.

  • <FIELD .../>

    Adatfájlban lévő mezőt határoz meg, amely adatokat tartalmaz. Az elem attribútumairól a cikk későbbi részében tárgyalunk, a az <FIELD> elemattribútumai szakaszban.

  • <ROW .../>

    Egy vagy több <COLUMN> elemet tartalmazó összetett elemet definiál. A <COLUMN> elemek sorrendje független a <FIELD> elemek sorrendjétől egy RECORD definícióban. A formátumfájl <COLUMN> elemeinek sorrendje határozza meg az eredményül kapott sorhalmaz oszlopsorrendét. Az adatmezők abban a sorrendben töltődnek be, amelyben a megfelelő <COLUMN> elemek deklarálva vannak a <COLUMN> elemben. További információért lásd a Hogyan használja a tömeges importálás a <ROW> elemeta cikk későbbi részében.

  • <COLUMN>

    Elemként definiál egy oszlopot (<COLUMN>). Minden <COLUMN> elem egy <FIELD> elemnek felel meg (amelynek azonosítója az SOURCE elem <COLUMN> attribútumában van megadva). Az elem attribútumairól a cikk későbbi részében tárgyalunk, a az <COLUMN> elemattribútumai szakaszban. Lásd még: Hogyan használja a tömeges importálás a <COLUMN> elemet, a cikk későbbi részében.

  • </BCPFORMAT>

    A formátumfájl befejezéséhez szükséges.

A <FIELD> elem attribútumai

Ez a szakasz a <FIELD> elem attribútumait ismerteti, amelyek a következő sémaszintaxisban vannak összefoglalva:

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

Minden <FIELD> elem független a többi elemétől. A mezők leírása az alábbi attribútumok alapján történik:

MEZŐ attribútum Leírás Szabadon választható/
Szükséges
ID="mezőazonosító" Az adatfájl mezőjének logikai nevét adja meg. A mező azonosítója a mezőre való hivatkozáshoz használt kulcs.

<FIELD ID="mezőazonosító" /> hozzárendelve <COLUMN SOURCE="mezőazonosító" />
Szükséges
xsi:type="fieldType" Ez egy XML-szerkezet (attribútumként használva), amely azonosítja az elem példányának típusát. A fieldType értéke határozza meg, hogy az adott példányban melyik választható attribútumra van szüksége. Kötelező (az adattípustól függően)
LENGTH="n" Ez az attribútum egy rögzített hosszúságú adattípus egy példányának hosszát határozza meg.

Az n értékének pozitív egész számnak kell lennie.
Nem kötelező, kivéve, ha az xsi:type érték megköveteli
PREFIX_LENGTH="p" Ez az attribútum határozza meg a bináris adatábrázolás előtagjának hosszát. A PREFIX_LENGTH, pa következő értékek egyikének kell lennie: 1, 2, 4vagy 8. Nem kötelező, kivéve, ha az xsi:type érték megköveteli
MAX_LENGTH="m" Ez az attribútum az adott mezőben tárolható bájtok maximális száma. Céltábla nélkül az oszlop maximális hossza nem ismert. A MAX_LENGTH attribútum korlátozza a kimeneti karakteroszlopok maximális hosszát, korlátozva az oszlop értékéhez lefoglalt tárterületet. Ez különösen akkor kényelmes, ha a OPENROWSET függvény BULK lehetőségét használja egy SELECT FROM záradékban.

Az m értékének pozitív egész számnak kell lennie. Alapértelmezés szerint a maximális hossz egy karakteres oszlop esetében 8000 karakter, egy nchar oszlop esetében pedig 4000 karakter.
Szabadon választható
COLLATION="collationName" COLLATION csak karaktermezők esetén engedélyezett. Az SQL Server kollációs neveinek listáját az SQL Server Kollációs Nevekcímű résznél találja. Szabadon választható
TERMINATOR="terminator" Ez az attribútum egy adatmező terminátorát adja meg. A terminátor bármilyen karakter lehet. Az elválasztó karakternek egyedinek kell lennie, amely nem része az adatoknak.

Alapértelmezés szerint a mező terminátora a tabulátor karakter (\t). Bekezdésjelek megjelenítéséhez használja a \r\n.
Ezt az attribútumot csak a xsi:type jelzésű karakteradatokkal használják, amelyekhez ez az attribútum szükséges.

  • xsi:type <FIELD> elem értékei

    A xsi:type érték egy XML-szerkezet (attribútumként használva), amely azonosítja az elem egy példányának adattípusát. További információért lásd az Az xsi:type érték beírása egy adatkészletbe szakaszt ebben a cikkben.

    A xsi:type elem <FIELD> értéke az alábbi adattípusokat támogatja.

    <FIELD> xsi:type értékek Szükséges XML-attribútumok
    adattípus esetén
    Választható XML-attribútumok
    adattípus esetén
    NativeFixed LENGTH Egyik sem.
    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

    Az SQL Server adattípusairól további információt az Adattípusok című témakörben talál.

  • az <COLUMN> elem attribútumai

    Ez a szakasz a <COLUMN> elem attribútumait ismerteti, amelyek a következő sémaszintaxisban vannak összefoglalva:

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

    Egy mező a céltábla egyik oszlopára van leképezve a következő attribútumok használatával:

    COLUMN attribútum Leírás Szabadon választható/
    Szükséges
    SOURCE="mezőazonosító" Az oszlophoz hozzárendelt mező azonosítóját adja meg.

    <COLUMN SOURCE=fieldID"/><FIELD ID=fieldID"/>
    Szükséges
    NAME="columnName" A formátumfájl által képviselt sorkészlet oszlopának nevét adja meg. Ez az oszlopnév az eredményhalmaz oszlopának azonosítására szolgál, és nem kell megegyeznie a céltáblában használt oszlop nevével. Szükséges
    xsi:type="ColumnType" Ez egy XML-szerkezet (attribútumként használva), amely azonosítja az elem példányának adattípusát. A ColumnType értéke határozza meg, hogy az adott példányban választható attribútumok közül melyikre van szüksége.

    Megjegyzés: A ColumnType lehetséges értékei és a hozzájuk tartozó attribútumok a xsi:type értékeinek <COLUMN> elemtáblában jelennek meg a <OSZLOP> elem szakaszában.
    Szabadon választható
    LENGTH="n" Meghatározza a rögzített hosszúságú adattípus egy példányának hosszát. LENGTH csak akkor használatos, ha a xsi:type karakterlánc típusú.

    Az n értékének pozitív egész számnak kell lennie.
    Nem kötelező (csak akkor érhető el, ha a xsi:type karakterlánc típusú adat)
    PRECISION="n" Egy szám számjegyeinek számát jelzi. A 123,45-ös szám például 5 pontosságú.

    Az értéknek pozitív egész számnak kell lennie.
    Nem kötelező (csak akkor érhető el, ha a xsi:type változószámú adattípus)
    SCALE="int" Egy szám tizedesvesszőjétől jobbra lévő számjegyek számát jelzi. A 123,45-ös szám például 2-es skálával rendelkezik.

    Az értéknek egész számnak kell lennie.
    Nem kötelező (csak akkor érhető el, ha a xsi:type változószámú adattípus)
    NULLABLE={ "IGEN" | "NEM" } Azt jelzi, hogy egy oszlop NULL értéket feltételezhet-e. Ez az attribútum független a FIELDS-tól. Ha azonban egy oszlop nem nullázható, és a mezőben NULL van megadva (ami azt jelenti, hogy nincs megadva érték), futásidejű hiba keletkezik.

    A NULLABLE attribútum csak akkor használatos, ha egyszerű SELECT FROM OPENROWSET(BULK...) utasítást használ.
    Nem kötelező (bármilyen adattípushoz elérhető)

  • xsi:type <COLUMN> elem értékei

    A xsi:type érték egy XML-szerkezet (attribútumként használva), amely azonosítja az elem egy példányának adattípusát. A "xsi:type érték adatkészletbe helyezése" című szakasz későbbi részében talál további információt.

    A <COLUMN> elem a következőképpen támogatja a natív SQL-adattípusokat:

    Kategóriatípus <COLUMN> adattípusok Szükséges XML-attribútumok
    adattípus esetén
    Választható XML-attribútumok
    adattípus esetén
    Rögzített SQLBIT, SQLTINYINT, SQLSMALLINT, SQLINT, SQLBIGINT, SQLFLT4, SQLFLT8, SQLDATETIME, SQLDATETIM4, SQLDATETIM8, SQLMONEY, SQLMONEY4, SQLVARIANTés SQLUNIQUEID Egyik sem. NULLABLE
    változó szám SQLDECIMAL és SQLNUMERIC Egyik sem. \, \, \
    változó dátum- és idő \, \, \ Egyik sem. NULLABLE, SCALE
    LOB SQLIMAGE, CharLOB, SQLTEXTés SQLUDT Egyik sem. NULLABLE
    karakter LOB SQLNTEXT Egyik sem. NULLABLE
    bináris karakterlánc SQLBINARY és SQLVARYBIN Egyik sem. NULLABLE, LENGTH
    Karakterlánc SQLCHAR, SQLVARYCHAR, SQLNCHARés SQLNVARCHAR Egyik sem. NULLABLE, LENGTH

    Fontos

    Az SQLXML-adatok tömeges exportálásához vagy importálásához használja a következő adattípusok egyikét a formátumfájlban: SQLCHAR vagy SQLVARYCHAR (az adatokat az ügyfélkódlapon vagy a rendezés által sugallt kódlapon küldi el), SQLNCHAR vagy SQLNVARCHAR (az adatokat Unicode-ként küldi el), vagy SQLBINARY vagy SQLVARYBIN (az adatokat konvertálás nélkül küldi el).

    Az SQL Server adattípusairól további információt az Adattípusok című témakörben talál.

Hogyan használja a tömeges importálás a <ROW> elemet?

A <ROW> elem bizonyos környezetekben figyelmen kívül lesz hagyva. Az, hogy a <ROW> elem befolyásolja-e a tömeges importálási műveletet, a művelet végrehajtásától függ:

  • A bcp parancs

    Amikor adatokat tölt be egy céltáblába, bcp figyelmen kívül hagyja a <ROW> összetevőt. Ehelyett bcp betölti az adatokat a céltábla oszloptípusai alapján.

  • Transact-SQL utasítások (BULK INSERT és OPENROWSETtömeges sorhalmaz-szolgáltató)

    Amikor tömegesen importál adatokat egy táblába, Transact-SQL utasítások a <ROW> összetevőt használják a bemeneti sorkészlet létrehozásához. Emellett Transact-SQL utasítások a megfelelő típuskonverziókat hajtják végre a <ROW> alatt megadott oszloptípusok és a céltábla megfelelő oszlopai alapján. Ha a formátumfájlban és a céltáblában megadott oszloptípusok között eltérés áll fenn, további típusátalakítás történik. Ez a további típusátalakítás némi eltérést okozhat a BULK INSERT vagy OPENROWSETtömeges sorhalmaz-szolgáltatójának viselkedésében (azaz pontosságvesztést) a bcp-hoz képest.

    A <ROW> elem információi lehetővé teszik, hogy a sorokat további információk nélkül lehessen létrehozni. Ezért létrehozhat egy sorkészletet egy SELECT utasítással (SELECT * FROM OPENROWSET(BULK <data-file> FORMATFILE=<xml-format-file>).

    A OPENROWSET BULK záradék formátumfájlt igényel. A mező adattípusáról az oszlop adattípusára való konvertálás csak XML formátumú fájllal érhető el.

Hogyan használja a tömeges importálás a <COLUMN> elemet?

Ha tömegesen importál adatokat egy táblába, a formátumfájl <COLUMN> elemei a következő beállításokkal képeznek le egy adatfájlmezőt táblázatoszlopokra:

  • Az adatfájl egyes mezőinek pozíciója az adatfájl egy sorában.

  • A mező adattípusának kívánt oszlop adattípussá alakításához használt oszloptípus.

Ha nincs mezőhöz hozzárendelt oszlop, a rendszer nem másolja a mezőt a létrehozott sorokba. Ez a viselkedés lehetővé teszi, hogy egy adatfájl különböző oszlopokkal rendelkező sorokat hozzon létre (különböző táblákban).

Hasonlóképpen, ha egy táblából tömegesen exportál adatokat, a formátumfájl minden <COLUMN> a bemeneti tábla oszlopát a kimeneti adatfájl megfelelő mezőjére képezi le.

A xsi:type értékének beállítása adatkészletbe

Ha egy XML-dokumentum ellenőrzése az XML-sémadefiníció (XSD) nyelvével történik, a xsi:type érték nem kerül az adatkészletbe. Az xsi:type adatokat azonban az XML-formátumfájl XML-dokumentumba (például myDoc) való betöltésével helyezheti el az adatkészletbe, ahogyan az az alábbi kódrészletben is látható:

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

Minta XML-formátumfájlok

Ez a szakasz az XML-formátumú fájlok különböző esetekben való használatáról tartalmaz információkat, beleértve egy Adventure Works-példát is.

Jegyzet

Az alábbi példákban látható adatfájlokban <tab> egy tabulátor karaktert jelöl egy adatfájlban, <return> pedig kocsivisszajelzést.

A példák az XML-formátumfájlok használatának főbb szempontjait szemléltetik az alábbiak szerint:

A formátumfájlok létrehozásáról további információt a Formátumfájl létrehozása bcp-vel (SQL Server) című témakörben talál.

A. A táblaoszlopokkal megegyező karakter-adatmezők rendezése

Az alábbi példa egy xml formátumú fájlt mutat be, amely egy három karaktert tartalmazó adatfájlt ír le. A formátumfájl egy három oszlopot tartalmazó táblába képezi le az adatfájlt. Az adatmezők egyesével felelnek meg a tábla oszlopainak.

  • táblázat (sor):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • adatfájl (rekord):Age<tab>FirstName<tab>LastName<return>

Az alábbi XML-formátumfájl az adatfájlból a táblába olvas be.

A <RECORD> elemben a formátumfájl mind a három mező adatértékét jelöli karakteradatokként. Minden mező esetében a TERMINATOR attribútum az adatértéket követő terminátort jelöli.

Az adatmezők egyesével felelnek meg a tábla oszlopainak. A <ROW> elemben a formátumfájl leképezi a Age oszlopot az első mezőre, a FirstName oszlopot a második mezőre, és a LastName oszlopot a harmadik mezőre.

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

Jegyzet

Ezzel egyenértékű AdventureWorks2025 példa: Formátumfájl létrehozása bcp-vel (SQL Server).

B. Adatmezők és táblaoszlopok eltérő sorrendje

Az alábbi példa egy xml formátumú fájlt mutat be, amely egy három karaktert tartalmazó adatfájlt ír le. A formátumfájl egy olyan táblára képezi le az adatfájlt, amely az adatfájl mezőitől eltérően rendezett három oszlopot tartalmaz.

  • táblázat (sor):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • adatfájl (rekord):Age<tab>FirstName<tab>LastName<return>

A <RECORD> elemben a formátumfájl mind a három mező adatértékét jelöli karakteradatokként.

A <ROW> elemben a formátumfájl a Age oszlopot az első mezőre, a FirstName oszlopot a harmadik mezőre, és a LastName oszlopot a második mezőre képezi le.

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

C. Adatmező kihagyása

Az alábbi példa egy OLYAN XML-formátumú fájlt mutat be, amely egy négy karaktert tartalmazó adatfájlt ír le. A formátumfájl egy három oszlopot tartalmazó táblába képezi le az adatfájlt. A második adatmező nem felel meg egyetlen táblaoszlopnak sem.

  • táblázat (sor):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • adatfájl (rekord):Age<tab>FirstName<tab>LastName<return>

A <RECORD> elemben a formátumfájl mind a négy mező adatértékét jelöli karakteradatokként. Minden mező esetében a TERMINATOR attribútum az adatértéket követő terminátort jelöli.

A <ROW> elemben a formátumfájl leképezi a Age oszlopot az első mezőre, a FirstName oszlopot a harmadik mezőre, a LastName oszlopot pedig a negyedik mezőre.

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

Jegyzet

Ezzel egyenértékű AdventureWorks2025 példa: Adatmező kihagyása formátumfájllal (SQL Server).

D. Térképezze fel a <FIELD> xsi:type-ot a <COLUMN> xsi:type-ra

Az alábbi példa különböző típusú mezőket és azok oszlopokhoz való leképezését mutatja be.

<?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-adatok leképezése táblázatba

Az alábbi példa létrehoz egy üres kétoszlopos táblát (t_xml), amelyben az első oszlop a int adattípusra, a második oszlop pedig a xml adattípusra van leképzve.

CREATE TABLE t_xml (c1 INT, c2 XML);

Az alábbi XML-formátumú fájl bepaktolna egy adatfájlt a t_xmltáblába.

<?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. Rögzített hosszúságú vagy rögzített szélességű mezők importálása

Az alábbi példa 10 vagy 6 karakterek rögzített mezőit ismerteti. A formátumfájl ezeket a mezőhosszokat/szélességeket LENGTH="10" és LENGTH="6"jelöli. Az adatfájlok minden sora egy kocsivisszasoros adatcsatorna-kombinációval végződik, <CR><LF>, amelyet a formátumfájl TERMINATOR="\r\n"jelöl.

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

További példák

További példák a nem XML formátumú fájlokra és az XML formátumfájlokra is, lásd a következő cikkeket: