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

適用対象:yesSQL Server (サポートされているすべてのバージョン) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics yesAnalytics Platform System (PDW)

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

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

注意

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

このトピックの内容

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

  • XML フォーマット ファイルは、自己記述型を特徴とし、見やすく簡単に作成、拡張することができます。 人間に読みやすいように書かれているので、一括操作でのデータの解釈方法を容易に理解できます。

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

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

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

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

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

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

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

    注意

    対象テーブル列を使用して型変換を行う bcp コマンドと BULK INSERT ステートメントでは、対象テーブルが必要となります。

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

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

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

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

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

    <記録>

    <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 フォーマット ファイルのサンプル」を参照してください。

注意

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

このセクションの内容

XML スキーマの基本構文

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

<BCPFORMAT ...>

<記録>

<FIELD ID = "fieldID" xsi:type = "fieldType" [...]

/>

</RECORD>

<ROW>

<COLUMN SOURCE = "fieldID" NAME = "columnName" xsi:type = "columnType" [...]

/>

</ROW>

</BCPFORMAT>

注意

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> 要素は、他の要素とは独立しています。 フィールドは、次の属性を使用して表現されます。

FIELD 要素の属性 説明 省略可能 /

必須
ID ="fieldID" データ ファイル内のフィールドの論理名を指定します。 フィールドの ID は、フィールドを参照する際に使用するキーになります。

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

n の値は、正の整数にする必要があります。
省略可能 (xsi:type 値で必要な場合は必須)。
PREFIX_LENGTH ="p" バイナリ データ表現のプレフィックス長を定義します。 PREFIX_LENGTH 値の p は、1、2、4、または 8 のいずれかにする必要があります。 省略可能 (xsi:type 値で必要な場合は必須)。
MAX_LENGTH ="m" 指定したフィールドに格納できる最大バイト数を定義します。 対象のテーブルがない場合、列の最大長を決めることはできません。 MAX_LENGTH 属性では、出力先の文字列型の列の最大長を制限し、列の値に割り当てる領域を制限しています。 この属性は、SELECT FROM 句で OPENROWSET 関数の BULK オプションを使用している場合に特に有益です。

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

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

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_LENGTH、COLLATION
NCharPrefix PREFIX_LENGTH MAX_LENGTH、COLLATION
CharTerm TERMINATOR MAX_LENGTH、COLLATION
NCharTerm TERMINATOR MAX_LENGTH、COLLATION

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

COLUMN> 要素の<属性

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

<要素の xsi:type 値

SOURCE = "fieldID"

NAME = "columnName"

xsi:type = "columnType"

[ LENGTH = "n" ]

[ PRECISION = "n" ]

[ SCALE = "value" ]

[ NULLABLE = { "YES"

"NO" } ]

/>

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

COLUMN 要素の属性 説明 省略可能 /

必須
SOURCE ="fieldID" 列にマップされているフィールドの ID を指定します。

<COLUMN SOURCE**="fieldID"/> maps to <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 要素から完全に独立しています。 ただし、列が NULLABLE ではない場合に、フィールドで NULL が指定された (何も値が指定されない) 場合、実行時エラーが発生します。

NULLABLE 属性は、単純な SELECT FROM OPENROWSET(BULK...) ステートメントを実行する場合にのみ使用されます。
省略可能 (任意のデータ型で使用可能)
COLUMN> 要素の <Xsi:type 値

xsi:type 値は、要素のインスタンスのデータ型を特定する XML コンストラクトです (これは属性のように使用します)。 詳細については、このトピックの「xsi:type 値のデータセットへの格納」を参照してください。

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

データ型 <COLUMN> データ型 必要な XML

属性
データ型に関する省略可能な XML

属性
固定 SQLBITSQLTINYINTSQLSMALLINTSQLINTSQLBIGINTSQLFLT4SQLFLT8SQLDATETIMESQLDATETIM4SQLDATETIM8SQLMONEYSQLMONEY4SQLVARIANT、および SQLUNIQUEID [なし] : NULLABLE
可変数値 SQLDECIMAL および SQLNUMERIC [なし] : NULLABLE、PRECISION、SCALE
LOB SQLIMAGECharLOBSQLTEXT、および SQLUDT [なし] : NULLABLE
CLOB SQLNTEXT [なし] : NULLABLE
バイナリ文字列 SQLBINARY および SQLVARYBIN [なし] : NULLABLE、LENGTH
文字列 SQLCHARSQLVARYCHARSQLNCHAR、および SQLNVARCHAR [なし] : NULLABLE、LENGTH

重要

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

SQL Server のデータ型について詳しくは、「データ型 (Transact-SQL)」をご覧ください。

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

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

  • bcp コマンド

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

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

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

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

    注意

    OPENROWSET BULK 句では、フォーマット ファイルが必要です (フィールドのデータ型から列のデータ型に変換する処理には、XML フォーマット ファイルが必要であることに注意してください)。

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

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

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

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

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

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

xsi:type 値のデータセットへの格納

XML ドキュメントが XML Schema Definition (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 フォーマット ファイルを使用するときの情報について説明します。

注意

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

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

注意

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

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

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

テーブル (行): Person (Age int, FirstName varchar(20), LastName varchar(30))

データ ファイル (レコード): [年齢<] タブの>[姓<] タブ>の [姓<] の戻り値>

次の 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>  

注意

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

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

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

テーブル (行): Person (Age int, FirstName varchar(20), LastName varchar(30))

データ ファイル (レコード): [年齢<] タブの [>姓<] タブ>名<の戻り値>

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

注意

同等の AdventureWorks2012 の例については、「フォーマット ファイルを使用してテーブル列をData-Fileフィールドにマップする (SQL Server)」を参照してください。

C. データ フィールドをスキップする場合

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

テーブル (行): Person (Age int, FirstName Varchar(20), LastName Varchar(30))

データ ファイル (レコード): [年齢<] タブ>の [employeeID<] タブ [>姓<] タブ>[姓<] の戻り値>

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

注意

同等の AdventureWorks2012 の例については、「フォーマット ファイルを使用してデータ フィールドをスキップする (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 フォーマット ファイルに関するその他の例については、次のトピックを参照してください。

Related Tasks

関連コンテンツ

[なし] :

参照

データの一括インポートと一括エクスポート (SQL Server)
データ型 (Transact-SQL)
XML 以外のフォーマット ファイル (SQL Server)
データのインポートまたはエクスポート用のフォーマット ファイル (SQL Server)