次の方法で共有


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

SQL Server 2014 には、SQL Server テーブルへのデータの一括インポートに使用する XML フォーマット ファイル を書き込むための構文を定義する XML スキーマが用意されています。 XML フォーマット ファイルは、XML スキーマ定義言語 (XSDL) で定義されているこのスキーマに従う必要があります。 XML フォーマット ファイルは SQL Server ツールが SQL Server Native Client と共にインストールされている場合のみサポートされます。

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

一括エクスポートと一括インポートでは、XML 以外のフォーマット ファイルと XML フォーマット ファイル の 2 種類の フォーマット ファイルがサポートされています。 XML フォーマット ファイルは、XML 以外のフォーマット ファイルに代わる柔軟で強力な代替手段を提供します。 XML 以外のフォーマット ファイルの詳細については、「XML 以外のフォーマット ファイル (SQL Server)」を参照してください。

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

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

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

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

  • XML フォーマット ファイルを使用すると、1 つのラージ オブジェクト (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 ]

    </記録>

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

    データ ファイル内のフィールドには、固定/可変長または終了文字のいずれかを指定できます。 フィールド値は、文字 (1 バイト表現を使用)、ワイド文字 (Unicode 2 バイト表現を使用)、ネイティブ データベース形式、またはファイル名として表すことができます。 フィールド値がファイル名として表される場合、ファイル名はターゲット テーブルの BLOB 列の値を含むファイルを指します。

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

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

    <漕ぐ>

    <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" [...]

/>

</記録>

<漕ぐ>

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

/>

</ROW>

</BCPFORMAT>

このトピックの後半では、 <FIELD> または <COLUMN> 要素の xsi:type の値に関連付けられている追加の属性について説明します。

スキーマ要素

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

<BCPFORMAT>
指定されたデータ ファイルのレコード構造と、テーブル内のテーブル行の列との対応を定義するフォーマット ファイル要素です。

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

<畑。。。/>
データを含むデータ ファイル内のフィールドを定義します。

この要素の属性については、このトピックの後半の 「 <FIELD> 要素の属性」で説明します。

<漕ぐ。。。/>
1 つ以上の <COLUMN> 要素を含む複合要素を定義します。 <COLUMN>要素の順序は、RECORD 定義内の <FIELD> 要素の順序とは無関係です。 代わりに、フォーマット ファイル内の <COLUMN> 要素の順序によって、結果の行セットの列の順序が決まります。 データ フィールドは、対応する <COLUMN> 要素が <COLUMN> 要素で宣言されている順序で読み込まれます。

詳細については、このトピックで後述 する「 <ROW> 要素を一括インポートで使用する方法」を参照してください。

<コラム>
列を要素 (<COLUMN>) として定義します。 各 <COLUMN> 要素は、 <FIELD> 要素に対応します (ID は <COLUMN> 要素の SOURCE 属性で指定されます)。

この要素の属性については、このトピックの後半の 「 <COLUMN> 要素の属性」で説明します。 また、このトピックの後半の「 一括インポートで <COLUMN> 要素を使用する方法」も参照してください。

</BCPFORMAT>
フォーマット ファイルを終了するために必要です。

<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"/> maps to <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 整列
NCharFixed LENGTH 整列
CharPrefix PREFIX_LENGTH MAX_LENGTH、照合順序
NCharPrefix PREFIX_LENGTH MAX_LENGTH、照合順序
CharTerm TERMINATOR MAX_LENGTH、照合順序
NCharTerm TERMINATOR MAX_LENGTH、照合順序

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

<COLUMN> 要素の属性

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

<コラム

SOURCE = "fieldID"

NAME = "columnName"

xsi:type = "columnType"

[ LENGTH = "n" ]

[ PRECISION = "n" ]

[ SCALE = "value" ]

[ NULLABLE = { "YES"

"いいえ" } ]

/>

フィールドは、次の属性を使用してターゲット テーブル内の列にマップされます。

COLUMN 属性 説明 任意

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

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

注: ColumnType の使用可能な値とそれに関連する属性を次の表に示します。
オプション
長さ ="n" 固定長データ型のインスタンスの長さを定義します。 LENGTH は、xsi:type が文字列データ型の場合にのみ使用されます。

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

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

この値は、整数にする必要があります。
省略可能 (xsi:type が変数番号のデータ型の場合にのみ使用できます)
ヌル許容 = { "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 なし。 NULL可能
変数番号 SQLDECIMALSQLNUMERIC なし。 NULL可能、有効桁数、スケール
ロブ SQLIMAGECharLOBSQLTEXT、および SQLUDT なし。 null可能
キャラクター・LOB SQLNTEXT なし。 ヌル値を許容
バイナリ文字列 SQLBINARYSQLVARYBIN なし。 NULLを許容可能、長さ
文字列 SQLCHARSQLVARYCHARSQLNCHAR、および SQLNVARCHAR なし。 NULL 値許容、長さ

重要

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 の Bulk 行セット プロバイダーの動作に何らかの不一致 (つまり、精度の損失) が生じる可能性があります。

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

    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 フォーマット ファイルを使用する方法について説明します。

次の例に示すデータファイルでは、<tab> はデータファイル内のタブ文字を示し、<return> はキャリッジリターンを示します。

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

A。 テーブル列と同じ文字データ フィールドの順序付け

次の例は、文字データの 3 つのフィールドを含むデータ ファイルを記述する XML フォーマット ファイルを示しています。 フォーマット ファイルは、データ ファイルを 3 つの列を含むテーブルにマップします。 データ フィールドは、テーブルの列に 1 対 1 で対応します。

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

データ ファイル (レコード): 年齢<tab>名<tab>姓<return>

次の XML フォーマット ファイルは、データ ファイルからテーブルに読み取ります。

<RECORD>要素では、フォーマット ファイルは、3 つのフィールドすべてに含まれるデータ値を文字データとして表します。 フィールドごとに、 TERMINATOR 属性は、データ値の後に続くターミネータを示します。

データ フィールドは、テーブルの列に 1 対 1 で対応します。 <ROW>要素では、フォーマット ファイルは列Ageを最初のフィールドにマップし、列FirstNameを 2 番目のフィールドに、列を 3 番目のフィールドにLastNameします。

<?xml version="1.0"?>  
<BCPFORMAT   
xmlns="https://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))

データ ファイル (レコード): 年齢<tab>Lastname<tab>Firstname<return>

<RECORD>要素では、フォーマット ファイルは、3 つのフィールドすべてに含まれるデータ値を文字データとして表します。

<ROW>要素では、書式ファイルは列Ageを最初のフィールドに、列FirstNameを 3 番目のフィールドにマップし、列を 2 番目のフィールドにLastNameします。

<?xml version="1.0"?>  
<BCPFORMAT   
xmlns="https://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))

データ ファイル(レコード): 年齢<タブ>従業員ID<タブ>名<タブ>姓<リターン>

<RECORD>要素では、フォーマット ファイルは、4 つのフィールドすべてに含まれるデータ値を文字データとして表します。 各フィールドについて、TERMINATOR 属性はデータ値の後に続くターミネータを示します。

<ROW>要素では、フォーマット ファイルは列Ageを最初のフィールドに、列FirstNameを 3 番目のフィールドにマップし、列を 4 番目のフィールドにLastNameします。

<BCPFORMAT   
xmlns="https://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="https://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) を作成します。このテーブルでは、最初の列が int データ型にマップされ、2 番目の列が xml データ型にマップされます。

CREATE TABLE t_xml (c1 int, c2 xml)  

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

<?xml version="1.0"?>  
<BCPFORMAT xmlns="https://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="https://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 フォーマット ファイルの両方のその他の例については、次のトピックを参照してください。

関連タスク

関連コンテンツ

なし。

こちらもご覧ください

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