次の方法で共有


XML フォーマット ファイル (SQL Server)

適用対象:SQL ServerAzure SQL データベースAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

SQL Server には、SQL Server のテーブルにデータを一括インポートする目的で使用する XML フォーマット ファイルを記述するための構文を定義した XML スキーマが用意されています。 このスキーマは XML Schema Definition Language (XSDL) で定義されています。XML フォーマット ファイルはこのスキーマに準拠している必要があります。 XML フォーマット ファイルは SQL Server ツールが SQL Server Native Client と共にインストールされている場合のみサポートされます。

bcp コマンド、BULK INSERT ステートメント、または INSERT ... SELECT * FROM OPENROWSET(BULK...) ステートメントで XML フォーマット ファイルを使用できます。 bcp コマンドを使用すると、テーブルの XML フォーマット ファイルを自動的に生成できます。詳細については、bcp ユーティリティを参照してください。

一括エクスポートおよび一括インポート用に 2 種類のフォーマット ファイルがサポートされています。 XML 以外のフォーマット ファイルXML フォーマット ファイルです。 XML フォーマット ファイルは XML 以外のフォーマット ファイルに比べ、柔軟かつ強力です。 XML 以外のフォーマット ファイルの詳細については、「XML 以外のフォーマット ファイルの使用 (SQL Server)」を参照してください。

Note

一括挿入を含むこの構文は、Azure Synapse Analytics ではサポートされていません。 Azure Synapse Analytics やその他のクラウド データベース プラットフォーム統合では、 Azure Data Factory の COPY ステートメントを使用するか、 COPY INTO や PolyBase などの T-SQL ステートメントを使用してデータ移動を実行します。

XML フォーマット ファイルの利点

XML フォーマット ファイルは、自己記述型を特徴とし、見やすく簡単に作成、拡張することができます。 人間が判読できるため、一括操作中にデータがどのように解釈されるかを簡単に理解できます。

XML フォーマット ファイルには、ターゲット列のデータ型が格納されています。 XML エンコーディングでは、データ ファイルのデータ型およびデータ要素だけでなく、データ要素とテーブル列の間のマッピングを明確に記述できます。

これにより、データ ファイルでのデータの表記方法と、ファイル内の各フィールドに関連付けられるデータ型を切り離すことができます。 たとえば、データ ファイルにデータの文字表記が含まれている場合、対応する SQL 列の型が失われます。

XML フォーマット ファイルがあることで、データ ファイルから、単一のラージ オブジェクト (LOB) データ型を格納するフィールドを読み込むことができます。

XML フォーマット ファイルは機能を拡張できますが、以前のバージョンとの互換性も保たれます。 さらに XML エンコーディングは明確なので、特定のデータ ファイルに対して複数のフォーマット ファイルを容易に作成できます。 この特性は、データ フィールドの全体または一部を、さまざまなテーブルまたはビューの列にマップする必要がある場合に役立ちます。

XML の構文は、操作の方向とは関係がありません。つまり、一括エクスポートでも一括インポートでも構文は同じです。

XML フォーマット ファイルを使用すると、テーブルまたは非パーティション ビューにデータの一括インポートを行ったり、データの一括エクスポートを行ったりすることができます。

ターゲット テーブルを指定する OPENROWSET(BULK...) 関数の場合は省略可能です。 これは、この関数が XML フォーマット ファイルを使用してデータ ファイルからデータを読み取るためです。

Note

ターゲット テーブルは 、bcp コマンドと BULK INSERT ステートメントで必要です。このステートメントでは、ターゲット テーブルの列を使用して型変換を実行します。

XML フォーマット ファイルの構造

XML 以外のフォーマット ファイルと同様に、XML フォーマット ファイルでもデータ ファイル内のデータ フィールドの形式および構造を定義し、定義したデータ フィールドを 1 つのマップ先テーブル内の列にマップします。

XML フォーマット ファイルには、 <RECORD><ROW>という 2 つの主要なコンポーネントがあります。

  • <RECORD> は、データ ファイルに格納されているデータを表します。

    <RECORD> 要素には、1 つ以上の <FIELD> 要素のセットが含まれています。 それらの要素はデータ ファイル内のフィールドに対応します。 基本構文は次のとおりです。

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

    <FIELD> 要素は、特定のデータ フィールドの内容を記述します。 個々のフィールドは、テーブル内の 1 つの列にのみマップできます。 すべてのフィールドを列にマップする必要はありません。

    データ ファイルのフィールドは、固定/可変長にすることも、任意の文字で区切ることもできます。 フィールド値は、文字 (1 バイト表現を使用)、ワイド文字 (Unicode 2 バイト表現を使用)、ネイティブ データベース形式、またはファイル名として表すことができます。 フィールドの値をファイル名で表現する場合、対象になるテーブルの BLOB 列の値を含むファイルをそのファイル名で指すようにします。

  • <ROW> では、ファイルのデータが SQL Server テーブルにインポートされるときに、データ ファイルからデータ行を作成する方法について説明します。

    <ROW>要素には、一連の<COLUMN>要素が含まれています。 それらの要素はテーブル列に対応します。 基本構文は次のとおりです。

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

    <COLUMN> 要素は、データ ファイル内の 1 つのフィールドにのみマップできます。 <ROW>要素内の<COLUMN>要素の順序によって、一括操作によって返される順序が定義されます。 XML フォーマット ファイルでは、一括インポート操作の対象になるテーブルの列とのリレーションシップがない各 <COLUMN> 要素にローカル名が割り当てられます。

XML フォーマット ファイルのスキーマ構文

このセクションでは、XML フォーマット ファイルに対する XML スキーマの要素および属性について概要を説明します。 フォーマット ファイルの構文は、操作の方向とは関係がありません。つまり、一括エクスポートでも一括インポートでも構文は同じです。 このセクションでは、一括インポートで <ROW> 要素と <COLUMN> 要素を使用する方法と、要素の xsi:type 値をデータ セットに配置する方法についても説明します。

構文が実際の XML フォーマット ファイルとどのように対応しているかについては、このトピックの「XML フォーマット ファイルのサンプル」を参照してください。

Note

フォーマット ファイルを変更して、フィールドの数や順序がテーブル列とは異なるデータ ファイルから一括インポートできます。 詳細については、「データをインポートまたはエクスポートするためのフォーマット ファイル (SQL Server)」を参照してください。

XML スキーマの基本構文

これらの構文ステートメントには、要素 (<BCPFORMAT><RECORD><FIELD><ROW>、および <COLUMN>) とその基本属性のみが表示されます。

Note

<FIELD>または<COLUMN>要素のxsi:typeの値に関連付けられている追加の属性については、この記事で後述します。

スキーマ要素

ここでは、XML スキーマで XML フォーマット ファイル用に定義している各要素の目的を説明します。 属性については、この記事で後述する別のセクションで説明します。

  • <BCPFORMAT>

    特定のデータ ファイルのレコード構造と、テーブル内のテーブル行の列との対応を定義するフォーマット ファイル要素。

  • <RECORD .../>

    1 つ以上の <FIELD> 要素を含む複合要素を定義します。 フォーマット ファイルでフィールドが宣言される順序は、データ ファイルでフィールドが表示される順序と同じです。

  • <FIELD .../>

    データを含むデータ ファイル内のフィールドを定義します。 この要素の属性については、この記事の後半の <FIELD> 要素の属性」で説明します。

  • <ROW .../>

    1 つ以上の <COLUMN> 要素を含む複合要素を定義します。 <COLUMN>要素の順序は、RECORD定義内の<FIELD>要素の順序とは無関係です。 代わりに、フォーマット ファイル内の <COLUMN> 要素の順序によって、結果の行セットの列の順序が決まります。 データ フィールドは、対応する <COLUMN> 要素が <COLUMN> 要素で宣言されている順序で読み込まれます。 詳細については、この記事で後述 する「一括インポートで <ROW> 要素を使用する方法」を参照してください。

  • <COLUMN>

    列を要素 (<COLUMN>) として定義します。 各<COLUMN>要素は、<FIELD>要素 (<COLUMN>要素のSOURCE属性で ID が指定されている) に対応します。 この要素の属性については、この記事の後半の <COLUMN> 要素の属性」で説明します。 また、この記事の後半の「 一括インポートで <COLUMN> 要素を使用する方法」も参照してください。

  • </BCPFORMAT>

    フォーマット ファイルを終了するために必要なフォーマット ファイル要素です。

<FIELD>要素の属性

このセクションでは、 <FIELD> 要素の属性について説明します。これらの属性は、次のスキーマ構文にまとめられています。

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

<FIELD> 要素は、他の要素から独立しています。 フィールドは、次の属性を使用して表現されます。

フィールド属性 説明 オプション /
必須
ID="fieldID" データ ファイル内のフィールドの論理名を指定します。 フィールドの ID は、フィールドを参照する際に使用するキーになります。

<FIELD ID="fieldID" /><COLUMN SOURCE="fieldID" /> にマップされます
必須
xsi:type="fieldType" 要素のインスタンスの種類を特定する XML コンストラクトです (これは属性のように使用します)。 fieldType の値によって、特定のインスタンスで必要な省略可能な属性が決まります。 必須 (データ型により異なる)
LENGTH="n" 固定長データ型のインスタンスの長さを定義します。

n の値は、正の整数にする必要があります。
省略可能 ( xsi:type 値で必要な場合を除く)
PREFIX_LENGTH="p" バイナリ データ表現のプレフィックス長を定義します。 PREFIX_LENGTHp は、124、または8のいずれかの値である必要があります。 省略可能 ( xsi:type 値で必要な場合を除く)
MAX_LENGTH="m" 指定したフィールドに格納できる最大バイト数を定義します。 ターゲット テーブルがない場合、列の最大長は不明です。 MAX_LENGTH属性は、出力文字列の最大長を制限し、列値に割り当てられるストレージを制限します。 これは、SELECT FROM句で OPENROWSET 関数の BULK オプションを使用する場合に特に便利です。

m の値は、正の整数にする必要があります。 既定では、 char 列の最大長は 8,000 文字、 nchar 列の場合は 4,000 文字です。
オプション
COLLATION="collationName" COLLATION は、文字フィールドに対してのみ使用できます。 SQL Server 照合順序名の一覧については、「 SQL Server 照合順序名」を参照してください。 オプション
TERMINATOR="terminator" データ フィールドのターミネータを指定します。 ターミネータには、任意の文字を使用できます。 ただし、ターミネータには、データに含まれていない一意な文字を使用する必要があります。

既定では、フィールド ターミネータはタブ文字 ( \tとして表されます) です。 段落記号を表すには、 \r\nを使用します。
この属性は、この属性を必要とする文字データの xsi:type でのみ使用されます。

  • xsi:type<FIELD>要素の値

    xsi:type値は、要素のインスタンスのデータ型を識別する XML コンストラクト (属性と同様に使用) です。 詳細については、この記事 の「xsi:type 値をデータ セットに格納する 」セクションを参照してください。

    <FIELD>要素のxsi:type値は、次のデータ型をサポートしています。

    <FIELD>xsi:type 必要な XML 属性
    データ型の場合
    省略可能な XML 属性
    データ型の場合
    NativeFixed LENGTH なし。
    NativePrefix PREFIX_LENGTH MAX_LENGTH
    CharFixed LENGTH COLLATION
    NCharFixed LENGTH COLLATION
    CharPrefix PREFIX_LENGTH MAX_LENGTHCOLLATION
    NCharPrefix PREFIX_LENGTH MAX_LENGTHCOLLATION
    CharTerm TERMINATOR MAX_LENGTHCOLLATION
    NCharTerm TERMINATOR MAX_LENGTHCOLLATION

    SQL Server データ型の詳細については、「データ 型」を参照してください。

  • <COLUMN>要素の属性

    このセクションでは、 <COLUMN> 要素の属性について説明します。これらの属性は、次のスキーマ構文にまとめられています。

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

    フィールドは、次の属性を使用して、対象となるテーブルにマップされます。

    COLUMN 属性 説明 オプション /
    必須
    SOURCE="fieldID" 列にマップされているフィールドの ID を指定します。

    <COLUMN SOURCE=fieldID"/>、<FIELD ID=fieldID"/> にマップされます
    必須
    NAME="columnName" フォーマット ファイルで表している行セットの列の名前を指定します。 この列名は、結果セット内で列名を特定する際に使用されるので、対象のテーブルで使用されている列名に対応する必要はありません。 必須
    xsi:type="ColumnType" 要素のインスタンスのデータ型を特定する XML コンストラクトです (これは属性のように使用します)。 ColumnType の値によって、特定のインスタンスで必要な省略可能な属性が決まります。

    手記:ColumnType の使用可能な値とそれに関連する属性は、<COLUMN> 要素セクションの xsi:type 値の<COLUMN>要素テーブルに一覧表示されます。
    オプション
    LENGTH="n" 固定長データ型のインスタンスの長さを定義します。 LENGTH は、 xsi:type が文字列データ型の場合にのみ使用されます。

    n の値は、正の整数にする必要があります。
    省略可能 ( xsi:type が文字列データ型の場合にのみ使用できます)
    PRECISION="n" 数値全体の桁数を示します。 たとえば、数字 123.45 の有効桁数は 5 桁です。

    この値は、正の整数にする必要があります。
    省略可能 ( xsi:type が変数番号のデータ型の場合にのみ使用できます)
    SCALE="int" 数値の中で小数点より右側の桁数を示します。 たとえば、数字 123.45 の小数点以下桁数は 2 桁です。

    この値は、整数にする必要があります。
    省略可能 ( xsi:type が変数番号のデータ型の場合にのみ使用できます)
    NULLABLE={ "YES" | "NO" } 列が NULL 値を想定できるかどうかを示します。 この属性は、 FIELDSとは無関係です。 ただし、列が null 許容ではなく、フィールドで (値を指定しないことで) NULL を指定すると、実行時エラーが発生します。

    NULLABLE属性は、プレーンなSELECT FROM OPENROWSET(BULK...)ステートメントを実行する場合にのみ使用されます。
    省略可能 (任意のデータ型で使用可能)

  • xsi:type<COLUMN>要素の値

    xsi:type値は、要素のインスタンスのデータ型を識別する XML コンストラクト (属性と同様に使用) です。 このセクションで後述する「 xsi:type 値をデータ セットに格納する」の使用方法について説明します。

    <COLUMN>要素は、次のようにネイティブ SQL データ型をサポートします。

    タイプカテゴリ <COLUMN> データ型 必要な XML 属性
    データ型の場合
    省略可能な XML 属性
    データ型の場合
    修正済み SQLBITSQLTINYINTSQLSMALLINTSQLINTSQLBIGINTSQLFLT4SQLFLT8SQLDATETIMESQLDATETIM4SQLDATETIM8SQLMONEYSQLMONEY4SQLVARIANT、および SQLUNIQUEID なし。 NULLABLE
    変数番号 SQLDECIMALSQLNUMERIC なし。 NULLABLEPRECISIONSCALE
    可変の日付と時刻 SQLDATETIME2SQLTIMESQLDATETIMEOFFSET なし。 NULLABLESCALE
    LOB SQLIMAGECharLOBSQLTEXT、および SQLUDT なし。 NULLABLE
    文字 LOB SQLNTEXT なし。 NULLABLE
    バイナリ文字列 SQLBINARYSQLVARYBIN なし。 NULLABLELENGTH
    文字列 SQLCHARSQLVARYCHARSQLNCHAR、および SQLNVARCHAR なし。 NULLABLELENGTH

    重要

    SQLXML データを一括エクスポートまたはインポートするには、フォーマット ファイルで次のいずれかのデータ型を使用します。 SQLCHAR または SQLVARYCHAR (データはクライアント コード ページまたは照合順序によって暗黙的なコード ページで送信されます)、 SQLNCHAR または SQLNVARCHAR (データは Unicode として送信されます)、または SQLBINARY または SQLVARYBIN (データは変換なしで送信されます)。

    SQL Server データ型の詳細については、「データ 型」を参照してください。

一括インポートで <ROW> 要素を使用する方法

<ROW>要素は、一部のコンテキストでは無視されます。 <ROW>要素が一括インポート操作に影響するかどうかは、操作の実行方法によって異なります。

  • bcp コマンド

    ターゲット テーブルにデータが読み込まれると、 bcp<ROW> コンポーネントを無視します。 代わりに、 bcp コマンドでは、インポート先テーブルの列の型に基づいてデータが読み込まれます。

  • Transact-SQL ステートメント (BULK INSERTOPENROWSET の一括行セット プロバイダー)

    テーブルにデータを一括インポートする場合、Transact-SQL ステートメントは <ROW> コンポーネントを使用して入力行セットを生成します。 また、Transact-SQL ステートメントは、 <ROW> で指定された列型とターゲット テーブル内の対応する列に基づいて、適切な型変換を実行します。 フォーマット ファイルで指定されている列の型とインポート先のテーブルの列の型が一致しない場合、追加の型変換が実行されます。 この追加の型変換により、bcp と比較して、BULK INSERTまたはOPENROWSETの一括行セット プロバイダーでの動作に何らかの不一致 (つまり、精度の低下) が生じる可能性があります。

    <ROW>要素内の情報を使用すると、追加の情報を必要とせずに行を作成できます。 このため、 SELECT ステートメント (SELECT * FROM OPENROWSET(BULK <data-file> FORMATFILE=<xml-format-file>) を使用して行セットを生成できます。

    OPENROWSET BULK句にはフォーマット ファイルが必要です。 フィールドのデータ型から列のデータ型への変換は、XML フォーマット ファイルでのみ使用できます。

一括インポートで <COLUMN> 要素を使用する方法

データをテーブルに一括インポートする場合、フォーマット ファイル内の <COLUMN> 要素は、次のように指定してデータ ファイル フィールドをテーブル列にマップします。

  • データ ファイルの行内における各フィールドの位置。

  • 列の型 (この型はフィールドのデータ型を適切な列のデータ型に変換する際に使用します)。

フィールドにマップされている列がない場合、フィールドは生成された行にコピーされません。 この動作により、データ ファイルでは、(異なるテーブルの) 異なる列を持つ行を生成することができます。

同様に、テーブルからデータを一括エクスポートする場合、フォーマット ファイル内の各 <COLUMN> は、入力テーブル行の列を出力データ ファイル内の対応するフィールドにマップします。

xsi:type値をデータ セットに格納する

XML ドキュメントが XML スキーマ定義 (XSD) 言語で検証される場合、 xsi:type 値はデータ セットに格納されません。 ただし、次のコード スニペットに示すように、XML フォーマット ファイルを XML ドキュメント (myDoc など) に読み込むことで、xsi:type情報をデータ セットに格納できます。

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

XML フォーマット ファイルのサンプル

このセクションでは、Adventure Works の例など、さまざまなケースで XML フォーマット ファイルを使用する方法について説明します。

Note

下記の例で示すデータ ファイルでは、 <tab> がデータ ファイル内のタブ文字、 <return> が復帰を表します。

以下、XML フォーマット ファイルを使用する際の主な局面について例を使用して説明します。

フォーマット ファイルを作成する方法については、「 bcp を使用したフォーマット ファイルの作成 (SQL Server)」を参照してください。

A. 文字データ フィールドの順序とテーブル列の順序が同じ場合

次の例は、文字データのフィールドを 3 つ含んだデータ ファイルを記述する XML フォーマット ファイルを示しています。 フォーマット ファイルによって、このデータ ファイルを 3 列のテーブルにマッピングします。 データ フィールドは、テーブルの列と一対一に対応します。

  • テーブル (行):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • データ ファイル (レコード):Age<tab>FirstName<tab>LastName<return>

次の XML フォーマット ファイルはデータ ファイルのデータをテーブルに読み込みます。

<RECORD> 要素では、3 つのフィールドすべてのデータ値が文字データとして表現されています。 各フィールドの TERMINATOR 属性は、データ値の後のターミネータを示します。

データ フィールドは、テーブルの列と一対一に対応します。 <ROW> 要素で、列 Age を 1 番目のフィールドに、列 FirstName を 2 番目のフィールドに、列 LastName を 3 番目のフィールドにマッピングします。

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

Note

同等の AdventureWorks2022 例については、「 bcp を使用したフォーマット ファイルの作成 (SQL Server)」を参照してください。

B: データ フィールドの順序とテーブル列の順序が異なる場合

次の例は、文字データのフィールドを 3 つ含んだデータ ファイルを記述する XML フォーマット ファイルを示しています。 フォーマット ファイルによって、データ ファイルを 3 列のテーブルにマッピングします。ここでは、データ ファイルのフィールドの順序とマッピング先のテーブルの列の順序は異なるものとします。

  • テーブル (行):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • データ ファイル (レコード):Age<tab>FirstName<tab>LastName<return>

<RECORD> 要素では、3 つのフィールドすべてのデータ値が文字データとして表現されています。

<ROW> 要素で、列 Age を 1 番目のフィールドに、列 FirstName を 3 番目のフィールドに、列 LastName を 2 番目のフィールドにマッピングします。

<?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: データ フィールドをスキップする場合

次の例は、文字データのフィールドを 4 つ含んだデータ ファイルを記述する XML フォーマット ファイルを示しています。 フォーマット ファイルによって、このデータ ファイルを 3 列のテーブルにマッピングします。 2 番目のデータ フィールドは、どのテーブル列にも対応していません。

  • テーブル (行):Person (Age INT, FirstName VARCHAR(20), LastName VARCHAR(30))
  • データ ファイル (レコード):Age<tab>FirstName<tab>LastName<return>

<RECORD> 要素では、4 つのフィールドすべてのデータ値が文字データとして表現されています。 各フィールドの TERMINATOR 属性は、データ値の後のターミネータを示します。

<ROW> 要素で、列 Age を 1 番目のフィールドに、列 FirstName を 3 番目のフィールドに、列 LastName を 4 番目のフィールドにマッピングします。

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

Note

同等の AdventureWorks2022 例については、「 フォーマット ファイルを使用してデータ フィールドをスキップする (SQL Server)」を参照してください。

D: <FIELD> xsi:type を <COLUMN> xsi:type にマップする

次の例では、さまざまな型のフィールド、および列への各フィールドのマッピングを示します。

<?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 データをテーブルにマッピングする場合

次の例では、2 列の空テーブル (t_xml) を作成し、1 番目の列を int データ型に、2 番目の列を xml データ型にマッピングしています。

CREATE TABLE t_xml (c1 INT, c2 XML);

次の XML フォーマット ファイルを使用すると、テーブル 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. 固定長フィールドまたは固定幅フィールドをインポートする場合

次の例では、長さと幅がそれぞれ 10 文字または 6 文字に固定されたフィールドについて説明します。 これらのフィールドの長さと幅は LENGTH="10" および LENGTH="6"としてそれぞれ表現されています。 データ ファイルのすべての行は、キャリッジリターンとラインフィードの組み合わせ <CR><LF>で終わり、フォーマット ファイルは 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>

追加の例

XML 以外のフォーマット ファイルと XML フォーマット ファイルの両方の例については、次の記事を参照してください。