データのインポートまたはエクスポート用のフォーマット ファイル (SQL Server)

SQL Server テーブルにデータを一括インポートしたり、テーブルからデータを一括エクスポートする場合、フォーマット ファイルを使用して、データの一括エクスポートと一括インポートに必要なすべてのフォーマット情報を格納できます。 これには、そのテーブルに対応するデータ ファイル内の各フィールドのフォーマット情報が含まれます。

SQL Server 2012 では、XML フォーマット ファイルと XML 以外のフォーマット ファイルの 2 種類がサポートされます。 XML 以外のフォーマット ファイルにも XML フォーマット ファイルにもデータ ファイル内のすべてのフィールドの説明が含まれており、XML フォーマット ファイルには対応するテーブル列の説明も含まれています。 通常は、XML フォーマット ファイルと XML 以外のフォーマット ファイルの間には互換性があります。 ただし、XML フォーマット ファイルの方が XML 以外のフォーマット ファイルよりも優れた点がいくつかあるので、新しいフォーマット ファイルには XML 構文を使用することをお勧めします。 詳細については、「XML フォーマット ファイル (SQL Server)」を参照してください。

このトピックの内容

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

  • フォーマット ファイルの例

  • フォーマット ファイルが必要になるケース

  • 関連タスク

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

  • 他のデータ形式に準拠したり、他のソフトウェアからデータ ファイルを読み取るための編集をほとんど (あるいはまったく) 行うことなく、データ ファイルを出力できる柔軟なシステムが実現します。

  • 不要なデータを追加または削除したり、データ ファイル内の既存のデータを並べ替えたりしなくても、データを一括インポートできます。 フォーマット ファイルは、データ ファイルのフィールドとテーブルの列間に不一致がある場合に特に役立ちます。

フォーマット ファイルの例

次の例では、XML 以外のフォーマット ファイルと XML フォーマット ファイルのレイアウトを示します。 これらのフォーマット ファイルは、 AdventureWorks2012 サンプル データベースの HumanResources.myTeam テーブルに対応しています。 このテーブルには、EmployeeID、Name、Title、および ModifiedDate という 4 つの列があります。

注意

このテーブル、およびこのテーブルを作成する方法の詳細については、「HumanResources.myTeam サンプル テーブル (SQL Server)」を参照してください。

A. XML 以外のフォーマット ファイルの使用

次に示す XML 以外のフォーマット ファイルでは、HumanResources.myTeam テーブルに SQL Server ネイティブ データ形式を使用します。 このフォーマット ファイルは、次の bcp コマンドを使用して作成されました。

bcp AdventureWorks.HumanResources.myTeam format nul -f myTeam.Fmt -n -T 
The contents of this format file are as follows: 9.0
4
1       SQLSMALLINT   0       2       ""   1     EmployeeID               ""
2       SQLNCHAR      2       100     ""   2     Name                     SQL_Latin1_General_CP1_CI_AS
3       SQLNCHAR      2       100     ""   3     Title                    SQL_Latin1_General_CP1_CI_AS
4       SQLNCHAR      2       100     ""   4     Background               SQL_Latin1_General_CP1_CI_AS

詳細については、「XML 以外のフォーマット ファイル (SQL Server)」を参照してください。

[先頭に戻る]

B. XML フォーマット ファイルの使用

次に示す XML フォーマット ファイルでは、HumanResources.myTeam テーブルに SQL Server ネイティブ データ形式を使用します。 このフォーマット ファイルは、次の bcp コマンドを使用して作成されました。

bcp AdventureWorks.HumanResources.myTeam format nul -f myTeam.Xml -x -n -T 

このフォーマット ファイルの内容を次に示します。

 <?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" LENGTH="1"/>
  <FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="EmployeeID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="Title" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="Background" xsi:type="SQLNVARCHAR"/>
 </ROW>
</BCPFORMAT>

詳細については、「XML フォーマット ファイル (SQL Server)」を参照してください。

[先頭に戻る]

フォーマット ファイルが必要になるケース

INSERT ... SELECT * FROM OPENROWSET(BULK...) ステートメントでは、常にフォーマット ファイルが必要です。

  • bcp または BULK INSERT の場合、単純な状況では、フォーマット ファイルを使用しなくてもかまいません。必要になることはほとんどありません。 ただし、複雑な一括インポート操作を実行する場合は、頻繁にフォーマット ファイルが必要になります。

次の場合は、フォーマット ファイルが必要です。

  • 1 つのデータ ファイルが、スキーマが異なる複数のテーブルのソースとして使用される場合。

  • データ ファイルのフィールド数と対象のテーブルの列数が異なる場合。次に例を示します。

    • 対象のテーブルに、既定値が定義されているか、NULL 値が許可されている列が 1 つ以上含まれている。

    • ユーザーがテーブルの 1 つ以上の列に対する SELECT/INSERT 権限を持っていない。

    • スキーマが異なる複数のテーブルで、1 つのデータ ファイルが使用されている。

  • 列の順序がデータ ファイルとテーブルとの間で異なる場合。

  • 終了文字またはプレフィックス長がデータ ファイルの列によって異なる場合。

注意

フォーマット ファイルが存在しない場合に、bcp コマンドで data-format スイッチ (-n-c-w、または -N) を指定したり、BULK INSERT 操作で DATAFILETYPE オプションを指定すると、指定したデータ形式がデータ ファイルのフィールドを解釈するための既定の方法として使用されます。

[先頭に戻る]

関連タスク

[先頭に戻る]

関連項目

概念

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

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

一括インポートまたは一括エクスポートのデータ形式 (SQL Server)