Udostępnij za pomocą


Pliki formatu XML (SQL Server)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Program SQL Server udostępnia schemat XML, który definiuje składnię pisania plików formatu XML używanych do zbiorczego importowania danych do tabeli programu SQL Server. Pliki formatu XML muszą być zgodne z tym schematem, który jest zdefiniowany w języku XSDL (XML Schema Definition Language). Pliki formatu XML są obsługiwane tylko wtedy, gdy narzędzia programu SQL Server są instalowane razem z klientem natywnym programu SQL Server.

Możesz użyć pliku formatu XML z poleceniem bcp, instrukcją BULK INSERT lub instrukcją INSERT ... SELECT * FROM OPENROWSET(BULK...). Polecenie bcp umożliwia automatyczne generowanie pliku formatu XML dla tabeli; Aby uzyskać więcej informacji, zobacz narzędzie bcp.

Dwa typy plików formatu są obsługiwane w przypadku eksportowania zbiorczego i importowania: plików formatu innego niż XML i plików formatu XML. Pliki formatu XML zapewniają elastyczną i zaawansowaną alternatywę dla plików w formacie innym niż XML. Aby uzyskać informacje o plikach formatu innego niż XML, zobacz Use Non-XML format files (SQL Server)( Używanie plików w formacie non-XML (SQL Server).

Uwaga / Notatka

Ta składnia, w tym wstawianie zbiorcze, nie jest obsługiwana w usłudze Azure Synapse Analytics. W usłudze Azure Synapse Analytics i innych integracji platformy bazy danych w chmurze wykonaj przenoszenie danych za pomocą instrukcji COPY w usłudze Azure Data Factory lub za pomocą instrukcji T-SQL, takich jak COPY INTO i PolyBase.

Zalety plików formatu XML

Pliki formatu XML opisują się samodzielnie, co ułatwia ich odczytywanie, tworzenie i rozszerzanie. Są czytelne dla człowieka, co ułatwia zrozumienie sposobu interpretowania danych podczas operacji zbiorczych.

Pliki formatu XML zawierają typy danych kolumn docelowych. Kodowanie XML wyraźnie opisuje typy danych i elementy danych pliku danych, a także mapowanie między elementami danych i kolumnami tabeli.

Umożliwia to rozdzielenie sposobu reprezentowania danych w pliku danych i typu danych skojarzonych z każdym polem w pliku. Jeśli na przykład plik danych zawiera reprezentację znaków danych, odpowiedni typ kolumny SQL zostanie utracony.

Plik formatu XML umożliwia ładowanie pola zawierającego jeden duży typ danych obiektu (LOB) z pliku danych.

Plik formatu XML można jeszcze ulepszyć, ale zachować zgodność z jego wcześniejszymi wersjami. Ponadto przejrzystość kodowania XML ułatwia tworzenie wielu plików formatu dla danego pliku danych. Jest to przydatne, jeśli musisz mapować wszystkie lub niektóre pola danych na kolumny w różnych tabelach lub widokach.

Składnia XML jest niezależna od kierunku operacji; oznacza to, że składnia jest taka sama w przypadku eksportu zbiorczego i importu zbiorczego.

Pliki formatu XML umożliwiają zbiorcze importowanie danych do tabel lub widoków bez partycjonowania oraz zbiorcze eksportowanie danych.

Funkcja określająca OPENROWSET(BULK...) tabelę docelową jest opcjonalna. Wynika to z faktu, że funkcja opiera się na pliku formatu XML do odczytywania danych z pliku danych.

Uwaga / Notatka

Tabela docelowa jest niezbędna przy poleceniu bcp i instrukcji BULK INSERT, które używają kolumn tabeli docelowej do konwersji typów.

Struktura plików formatu XML

Podobnie jak plik formatu innego niż XML, plik formatu XML definiuje format i strukturę pól danych w pliku danych i mapuje te pola danych na kolumny w pojedynczej tabeli docelowej.

Plik formatu XML zawiera dwa główne składniki: <RECORD><ROW>

  • <RECORD> Opisuje dane przechowywane w pliku danych.

    Każdy <RECORD> element zawiera zestaw co najmniej jednego <FIELD> elementu. Te elementy odpowiadają polam w pliku danych. Podstawowa składnia jest następująca:

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

    Każdy <FIELD> element opisuje zawartość określonego pola danych. Pole można mapować tylko na jedną kolumnę w tabeli. Nie wszystkie pola muszą być mapowane na kolumny.

    Pole w pliku danych może mieć stałą/zmienną długość lub znak zakończony. Wartość pola może być reprezentowana jako: znak (przy użyciu reprezentacji jednobajtowej), szeroki znak (przy użyciu reprezentacji Unicode 2 bajtów), natywny format bazy danych lub nazwa pliku. Jeśli wartość pola jest reprezentowana jako nazwa pliku, to nazwa pliku wskazuje na plik, który zawiera wartość kolumny BLOB w tabeli docelowej.

  • <ROW> Opisuje sposób konstruowania wierszy danych z pliku danych, gdy dane z pliku są importowane do tabeli programu SQL Server.

    Element <ROW> zawiera zestaw <COLUMN> elementów. Te elementy odpowiadają kolumnom tabeli. Podstawowa składnia jest następująca:

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

    Każdy <COLUMN> element może być mapowany na tylko jedno pole w pliku danych. Kolejność elementów <COLUMN> w elemencie <ROW> definiuje kolejność, w której operacja zbiorcza je zwraca. Plik formatu XML przypisuje każdemu elementowi <COLUMN> nazwę lokalną, która nie ma relacji z kolumną w tabeli docelowej operacji importowania zbiorczego.

Składnia schematu dla plików formatu XML

Ta sekcja zawiera podsumowanie elementów i atrybutów schematu XML dla plików formatu XML. Składnia pliku formatu jest niezależna od kierunku operacji; oznacza to, że składnia jest taka sama w przypadku eksportu zbiorczego i importu zbiorczego. W tej sekcji opisano również sposób zbiorczego importowania elementów <ROW> i <COLUMN> oraz sposobu umieszczania xsi:type wartości elementu w zestawie danych.

Aby zobaczyć, jak składnia odpowiada rzeczywistym plikom formatu XML, zobacz przykładowe pliki formatu XML.

Uwaga / Notatka

Możesz zmodyfikować plik formatu, aby umożliwić zbiorcze importowanie z pliku danych, w którym liczba i/lub kolejność pól różnią się od liczby i/lub kolejności kolumn tabeli. Aby uzyskać więcej informacji, zobacz Pliki formatu do importu lub eksportu danych (SQL Server).

Podstawowa składnia schematu XML

Te instrukcje składni pokazują tylko elementy (<BCPFORMAT>, <RECORD>, <FIELD>, <ROW>i <COLUMN>) oraz ich podstawowe atrybuty.

Uwaga / Notatka

Dodatkowe atrybuty skojarzone z wartością w elemencie xsi:type, <FIELD> lub <COLUMN> zostały opisane w dalszej części tego artykułu.

Elementy schematu

Ta sekcja zawiera podsumowanie przeznaczenia każdego elementu zdefiniowanego przez schemat XML dla plików formatu XML. Atrybuty są opisane w oddzielnych sekcjach w dalszej części tego artykułu.

  • <BCPFORMAT>

    Element format-file, który definiuje strukturę rekordów danego pliku danych i jego korespondencję z kolumnami wiersza tabeli w tabeli.

  • <RECORD .../>

    Definiuje złożony element zawierający co najmniej jeden <FIELD> element. Kolejność deklarowanych pól w pliku formatu to kolejność, w jakiej te pola są wyświetlane w pliku danych.

  • <FIELD .../>

    Definiuje pole w pliku danych, które zawiera dane. Atrybuty tego elementu zostały omówione w temacie Atrybuty <FIELD> elementu w dalszej części tego artykułu.

  • <ROW .../>

    Definiuje złożony element zawierający co najmniej jeden <COLUMN> element. Kolejność <COLUMN> elementów jest niezależna od kolejności <FIELD> elementów w RECORD definicji. Zamiast tego kolejność <COLUMN> elementów w pliku formatu określa kolejność kolumn wynikowego zestawu wierszy. Pola danych są ładowane w kolejności, w której odpowiednie <COLUMN> elementy są deklarowane w elemecie <COLUMN> . Aby uzyskać więcej informacji, zobacz Jak element <ROW> jest używany przez zbiorczy import, w dalszej części tego artykułu.

  • <COLUMN>

    Definiuje kolumnę jako element (<COLUMN>). Każdy <COLUMN> element odpowiada elementowi <FIELD> (którego identyfikator jest określony w atrybucie SOURCE<COLUMN> elementu). Atrybuty tego elementu zostały omówione w temacie Atrybuty <COLUMN> elementu w dalszej części tego artykułu. Zobacz również, jak import zbiorczy używa <COLUMN> elementu w dalszej części tego artykułu.

  • </BCPFORMAT>

    Wymagane do zakończenia pliku formatu.

<FIELD> Atrybuty elementu

W tej sekcji opisano atrybuty <FIELD> elementu, które są podsumowane w następującej składni schematu:

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

Każdy <FIELD> element jest niezależny od innych. Pole zostało opisane pod względem następujących atrybutów:

Atrybut pola Opis Fakultatywny/
Wymagane
ID="fieldID" Określa nazwę logiczną pola w pliku danych. Identyfikator pola jest kluczem używanym do odwoływania się do pola.

<IDENTYFIKATOR POLA="fieldID" /> przypisuje się do <ŹRÓDŁO KOLUMNY="fieldID" />
Wymagane
xsi:type="fieldType" Jest to konstrukcja XML (używana jak atrybut), która identyfikuje typ wystąpienia elementu. Wartość fieldType określa, które z opcjonalnych atrybutów potrzebnych w danym wystąpieniu. Wymagane (w zależności od typu danych)
LENGTH="n" Ten atrybut definiuje długość wystąpienia typu danych o stałej długości.

Wartość n musi być dodatnią liczbą całkowitą.
Opcjonalnie, chyba że jest to wymagane przez xsi:type wartość
PREFIX_LENGTH="p" Ten atrybut definiuje długość prefiksu dla reprezentacji danych binarnych. Wartość PREFIX_LENGTH, p musi być jedną z następujących wartości: 1, , 24lub 8. Opcjonalnie, chyba że jest to wymagane przez xsi:type wartość
MAX_LENGTH="m" Ten atrybut jest maksymalną liczbą bajtów, które mogą być przechowywane w danym polu. Bez tabeli docelowej maksymalna długość kolumny nie jest znana. Atrybut MAX_LENGTH ogranicza maksymalną długość kolumny znaków wyjściowych, ograniczając magazyn przydzielony dla wartości kolumny. Jest to szczególnie wygodne podczas używania opcji OPENROWSET funkcji BULK w klauzuli SELECT FROM.

Wartość m musi być dodatnią liczbą całkowitą. Domyślnie maksymalna długość to 8000 znaków dla kolumny char i 4000 znaków dla kolumny nchar .
Opcjonalnie
COLLATION="collationName" COLLATION jest dozwolone tylko dla pól znaków. Aby uzyskać listę nazw sortowania programu SQL Server, zobacz Nazwa sortowania programu SQL Server. Opcjonalnie
TERMINATOR="terminator" Ten atrybut określa terminator pola danych. Terminator może być dowolnym znakiem. Terminator musi być unikalnym znakiem, który nie jest częścią zbioru danych.

Domyślnie terminator pola jest znakiem tabulacji (reprezentowanym jako \t). Aby oznaczyć znacznik akapitu, użyj \r\n.
Ten atrybut jest używany tylko z xsi:type danymi znaków, które wymagają tego atrybutu.

  • xsi:type wartości <FIELD> elementu

    Wartość xsi:type jest konstrukcją XML (używaną jak atrybut), która identyfikuje typ danych wystąpienia elementu. Aby uzyskać więcej informacji, zobacz Umieszczanie wartości xsi:type w sekcji zestawu danych w tym artykule.

    Wartość xsi:type<FIELD> elementu obsługuje następujące typy danych.

    <FIELD> xsi:type Wartości Wymagane atrybuty XML
    dla typu danych
    Opcjonalne atrybuty XML
    dla typu danych
    NativeFixed LENGTH Żaden.
    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

    Aby uzyskać więcej informacji na temat typów danych programu SQL Server, zobacz Typy danych.

  • <COLUMN> Atrybuty elementu

    W tej sekcji opisano atrybuty <COLUMN> elementu, które są podsumowane w następującej składni schematu:

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

    Pole jest mapowane na kolumnę w tabeli docelowej przy użyciu następujących atrybutów:

    Atrybut Kolumna Opis Fakultatywny/
    Wymagane
    SOURCE="fieldID" Określa ID pola mapowanego na kolumnę.

    <COLUMN SOURCE=fieldID"/> mapuje na <FIELD ID=fieldID"/>
    Wymagane
    NAME="columnName" Określa nazwę kolumny w zestawie wierszy reprezentowanym przez plik formatu. Ta nazwa kolumny służy do identyfikowania kolumny w zestawie wyników i nie musi odpowiadać nazwie kolumny używanej w tabeli docelowej. Wymagane
    xsi:type="ColumnType" Jest to konstrukcja XML (używana jak atrybut), która identyfikuje typ danych wystąpienia elementu. Wartość ColumnType określa, które z opcjonalnych atrybutów potrzebnych w danym wystąpieniu.

    Uwaga: Możliwe wartości ColumnType i ich skojarzone atrybuty są wymienione w <COLUMN> tabeli elementów w sekcji xsi:type wartości elementu <COLUMN>.
    Opcjonalnie
    LENGTH="n" Definiuje długość wystąpienia typu danych o stałej długości. LENGTH jest używany tylko wtedy, gdy xsi:type jest typem danych ciąg znaków.

    Wartość n musi być dodatnią liczbą całkowitą.
    Opcjonalne (dostępne tylko wtedy, gdy xsi:type ciąg jest typem danych)
    PRECISION="n" Wskazuje liczbę cyfr w liczbie. Na przykład liczba 123.45 ma dokładność 5.

    Wartość musi być dodatnią liczbą całkowitą.
    Opcjonalne (dostępne tylko wtedy, gdy xsi:type jest typem danych o zmiennej liczbie)
    SCALE="int" Wskazuje liczbę cyfr po prawej stronie przecinka dziesiętnego w liczbie. Na przykład liczba 123,45 ma skalę 2.

    Wartość musi być liczbą całkowitą.
    Opcjonalne (dostępne tylko wtedy, gdy xsi:type jest typem danych o zmiennej liczbie)
    NULLABLE={ "YES" | "NIE" } Wskazuje, czy kolumna może przyjąć NULL wartości. Ten atrybut jest niezależny od FIELDS. Jednak jeśli kolumna nie dopuszcza wartości null, a pole określa NULL (nie określając żadnej wartości), powoduje to błąd w czasie wykonywania.

    Atrybut NULLABLE jest używany tylko wtedy, gdy wykonujesz zwykłą SELECT FROM OPENROWSET(BULK...) instrukcję.
    Opcjonalne (dostępne dla dowolnego typu danych)

  • xsi:type wartości <COLUMN> elementu

    Wartość xsi:type jest konstrukcją XML (używaną jak atrybut), która identyfikuje typ danych wystąpienia elementu. Aby uzyskać informacje na temat korzystania z "Umieszczanie wartości xsi:type w zestawie danych," w dalszej części sekcji.

    Element <COLUMN> obsługuje natywne typy danych SQL w następujący sposób:

    Kategoria typów <COLUMN> typy danych Wymagane atrybuty XML
    dla typu danych
    Opcjonalne atrybuty XML
    dla typu danych
    Naprawiono SQLBIT, SQLTINYINT, SQLSMALLINT, SQLINT, SQLBIGINT, SQLFLT4, SQLFLT8, SQLDATETIME, SQLDATETIM4, SQLDATETIM8, SQLMONEY, SQLMONEY4, SQLVARIANT i SQLUNIQUEID Żaden. NULLABLE
    Liczba zmienna SQLDECIMAL i SQLNUMERIC Żaden. NULLABLE PRECISION SCALE
    Zmienna data i godzina SQLDATETIME2 SQLTIME SQLDATETIMEOFFSET Żaden. NULLABLE, SCALE
    LOB SQLIMAGE, CharLOB, SQLTEXTi SQLUDT Żaden. NULLABLE
    Znak LOB SQLNTEXT Żaden. NULLABLE
    Ciąg binarny SQLBINARY i SQLVARYBIN Żaden. NULLABLE, LENGTH
    Ciąg znaków SQLCHAR, SQLVARYCHAR, SQLNCHARi SQLNVARCHAR Żaden. NULLABLE, LENGTH

    Ważne

    Aby zbiorczo eksportować lub importować dane SQLXML, użyj jednego z następujących typów danych w pliku formatu: SQLCHAR lub SQLVARYCHAR (dane są wysyłane na stronie kodowej klienta lub na stronie kodowej implikowanej przez sortowanie) SQLNCHAR lub SQLNVARCHAR (dane są wysyłane jako Unicode) lub SQLBINARYSQLVARYBIN (dane są wysyłane bez żadnej konwersji).

    Aby uzyskać więcej informacji na temat typów danych programu SQL Server, zobacz Typy danych.

Jak import zbiorczy używa <ROW> elementu

Element <ROW> jest ignorowany w niektórych kontekstach. <ROW> To, czy element ma wpływ na operację importu zbiorczego, zależy od tego, jak operacja jest wykonywana:

  • Polecenie bcp

    Gdy dane są ładowane do tabeli docelowej, narzędzie bcp ignoruje <ROW> składnik. Zamiast tego narzędzie bcp ładuje dane na podstawie typów kolumn tabeli docelowej.

  • Transact-SQL instrukcji (BULK INSERT i OPENROWSETdostawcy zestawów wierszy zbiorczych)

    Podczas zbiorczego importowania danych do tabeli instrukcje Transact-SQL używają <ROW> składnika do generowania zestawu wierszy wejściowych. Ponadto instrukcje Transact-SQL wykonują odpowiednie konwersje typów na podstawie typów kolumn określonych w obszarze <ROW> i odpowiedniej kolumny w tabeli docelowej. Jeśli istnieje niezgodność między typami kolumn określonymi w pliku formatu i w tabeli docelowej, nastąpi dodatkowa konwersja typów. Ta dodatkowa konwersja typów może prowadzić do pewnej rozbieżności (tj. utraty precyzji) w zachowaniu BULK INSERT dostawcy zestawów wierszy zbiorczych lub OPENROWSETw porównaniu z bcp.

    Informacje w elemercie <ROW> umożliwiają konstruowanie wiersza bez konieczności wprowadzania dodatkowych informacji. Z tego powodu można wygenerować zestaw wierszy przy użyciu SELECT instrukcji (SELECT * FROM OPENROWSET(BULK <data-file> FORMATFILE=<xml-format-file>).

    Klauzula OPENROWSET BULK wymaga pliku formatu. Konwertowanie z typu danych pola na typ danych kolumny jest dostępne tylko z plikiem formatu XML.

Jak import zbiorczy używa <COLUMN> elementu

Podczas importowania danych w sposób zbiorczy do tabeli, elementy <COLUMN> w pliku formatów odwzorowują pole pliku danych na kolumny tabeli, określając:

  • Położenie każdego pola w wierszu w pliku danych.

  • Typ kolumny, który służy do konwertowania typu danych pola na żądany typ danych kolumny.

Jeśli żadna kolumna nie jest mapowana na pole, pole nie zostanie skopiowane do wygenerowanych wierszy. To zachowanie umożliwia plikowi danych generowanie wierszy z różnymi kolumnami (w różnych tabelach).

Podobnie w przypadku zbiorczego eksportowania danych z tabeli każdy <COLUMN> w pliku formatu mapuje kolumnę z wiersza tabeli wejściowej na odpowiednie pole w pliku danych wyjściowych.

Umieść wartość xsi:type w zestawie danych

Gdy dokument XML jest weryfikowany za pomocą języka definicji schematu XML (XSD), xsi:type wartość nie jest umieszczana w zestawie danych. Można jednak umieścić xsi:type informacje w zestawie danych, ładując plik formatu XML do dokumentu XML (na przykład myDoc), jak pokazano w poniższym fragmencie kodu:

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

Przykładowe pliki formatu XML

Ta sekcja zawiera informacje na temat używania plików formatu XML w różnych przypadkach, w tym przykładu adventure works.

Uwaga / Notatka

W plikach danych pokazanych w poniższych przykładach <tab> wskazuje znak tabulacji w pliku danych i <return> wskazuje powrót karetki.

Przykłady ilustrują kluczowe aspekty używania plików formatu XML w następujący sposób:

Aby uzyskać informacje o sposobie tworzenia plików formatu, zobacz Create a format file with bcp (SQL Server)(Tworzenie pliku formatu za pomocą programu bcp (SQL Server).

Odp. Porządkowaj pola danych znaków tak samo jak kolumny tabeli

W poniższym przykładzie pokazano plik formatu XML, który opisuje plik danych zawierający trzy pola danych znaków. Plik formatu mapuje plik danych na tabelę zawierającą trzy kolumny. Pola danych odpowiadają kolumnom tabeli jeden do jednego.

  • Tabela (wiersz):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • Plik danych (rekord):Age<tab>FirstName<tab>LastName<return>

Plik w formacie XML odczytuje dane z pliku danych i przenosi je do tabeli.

W elemecie <RECORD> plik formatu reprezentuje wartości danych we wszystkich trzech polach jako dane znaków. Dla każdego pola TERMINATOR atrybut wskazuje terminator, który jest zgodny z wartością danych.

Pola danych odpowiadają kolumnom tabeli jeden do jednego. W elemecie <ROW> plik formatu mapuje kolumnę Age na pierwsze pole, kolumnę FirstName na drugie pole i kolumnę LastName na trzecie pole.

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

Uwaga / Notatka

Aby zapoznać się z równoważnym AdventureWorks2025 przykładem, zobacz Tworzenie pliku formatu za pomocą narzędzia bcp (SQL Server).

B. Porządkowaj pola danych i kolumny tabeli inaczej

W poniższym przykładzie pokazano plik formatu XML, który opisuje plik danych zawierający trzy pola danych znaków. Plik formatu mapuje plik danych na tabelę zawierającą trzy kolumny uporządkowane inaczej niż pola pliku danych.

  • Tabela (wiersz):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • Plik danych (rekord):Age<tab>FirstName<tab>LastName<return>

W elemecie <RECORD> plik formatu reprezentuje wartości danych we wszystkich trzech polach jako dane znaków.

W elemecie <ROW> plik formatu mapuje kolumnę Age na pierwsze pole, kolumnę FirstName na trzecie pole i kolumnę LastName na drugie pole.

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

Uwaga / Notatka

Aby zapoznać się z równoważnym AdventureWorks2025 przykładem, zobacz Mapowanie kolumn tabeli na pola pliku danych (SQL Server) przy użyciu pliku formatu.

C. Pomijanie pola danych

W poniższym przykładzie pokazano plik formatu XML, który opisuje plik danych zawierający cztery pola danych znaków. Plik formatu mapuje plik danych na tabelę zawierającą trzy kolumny. Drugie pole danych nie odpowiada żadnej kolumnie tabeli.

  • Tabela (wiersz):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • Plik danych (rekord):Age<tab>FirstName<tab>LastName<return>

W elemecie <RECORD> plik formatu reprezentuje wartości danych we wszystkich czterech polach jako dane znaków. Dla każdego pola TERMINATOR atrybut wskazuje terminator, który jest zgodny z wartością danych.

W elemecie <ROW> plik formatu mapuje kolumnę Age na pierwsze pole, kolumnę FirstName na trzecie pole i kolumnę LastName na czwarte pole.

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

Uwaga / Notatka

Aby zapoznać się z równoważnym AdventureWorks2025 przykładem, zobacz Używanie pliku formatu do pomijania pola danych (SQL Server).

D. Mapuj <FIELD> xsi:type na <COLUMN> xsi:type

W poniższym przykładzie przedstawiono różne typy pól i ich mapowania na kolumny.

<?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. Mapuj dane XML na tabelę

W poniższym przykładzie tworzy się pustą tabelę dwukolumnową (t_xml), w której pierwsza kolumna jest mapowana na typ danych int, a druga kolumna jest mapowana na typ danych xml.

CREATE TABLE t_xml (c1 INT, c2 XML);

Poniższy plik formatu XML załaduje plik danych do tabeli 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. Importowanie pól o stałej długości lub stałej szerokości

W poniższym przykładzie opisano pola o stałej liczbie znaków, każde składające się z 10 lub 6 znaków. Plik formatu reprezentuje te długości/szerokości pól jako LENGTH="10" i LENGTH="6", odpowiednio. Każdy wiersz plików danych kończy się kombinacją zestawienia powrotnego karetki, <CR><LF>, którą plik formatu reprezentuje jako 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>

Dodatkowe przykłady

Aby uzyskać więcej przykładów plików formatu innego niż XML i plików formatu XML, zobacz następujące artykuły: