次の方法で共有


フォーマット ファイルを使用したデータ フィールドのスキップ (SQL Server)

データ ファイルには、テーブルの列数よりも多くのフィールドを格納できます。 このトピックでは、XML 以外のフォーマット ファイルと XML フォーマット ファイルの両方を変更し、データ ファイルに多くのフィールドを格納する方法について説明します。この操作は、テーブル列を対応するデータ フィールドにマップし、余分なフィールドを無視することによって行います。

Note

BCP コマンド、BULK INSERT ステートメント、または INSERT ..を使用して、XML または XML 以外のフォーマット ファイルを使用して、データ ファイルをテーブルに一括インポートできます。SELECT * FROM OPENROWSET(BULK...) ステートメント。 詳細については、「データの一括インポートでのフォーマット ファイルの使用 (SQL Server)」を参照してください。

サンプル データ ファイルとサンプル テーブル

このトピックで例として変更するフォーマット ファイルは、次のテーブルとデータ ファイルに基づいています。

サンプル テーブル

この例では、 という名前 myTestSkipField のテーブルをスキーマの下の AdventureWorks2012 サンプル データベースに作成する dbo 必要があります。 このテーブルを作成するには、Microsoft SQL Server Management Studio クエリ エディターで次のコードを実行します。

USE AdventureWorks2012;  
GO  
CREATE TABLE myTestSkipField   
   (  
   PersonID smallint,  
   FirstName nvarchar(50) ,  
   LastName nvarchar(50)   
   );  
GO  

サンプル データ ファイル

データ ファイル myTestSkipField-c.dat には、次のレコードが含まれています。

1,Skipme,DataField3,DataField4  
1,Skipme,DataField3,DataField4  
1,Skipme,DataField3,DataField4  

myTestSkipField-c.dat から myTestSkipField テーブルにデータを一括インポートするには、フォーマット ファイルで次の操作を行う必要があります。

  • 最初のデータ フィールドを最初の列 PersonIDにマップします。

  • 2 番目のデータ フィールドをスキップします。

  • 3 番目のデータ フィールドを 2 番目の列 FirstNameにマップします。

  • 4 番目のデータ フィールドを 3 番目の列 LastNameにマップします。

より多くのデータ フィールドを格納するための XML 以外のフォーマット ファイル

次のフォーマット ファイル myTestSkipField.fmt は、myTestSkipField-c.dat のフィールドを myTestSkipField テーブルの列にマップします。 このフォーマット ファイルでは、文字データ形式が使用されます。 列マッピングをスキップするには、フォーマット ファイルの ExtraField 列に示すように、その列の順序の値を 0 に変更する必要があります。

myTestSkipField.fmt フォーマット ファイルには、次の情報が含まれています。

9.0  
4  
1       SQLCHAR       0       7       ","      1     PersonID               ""  
2       SQLCHAR       0       100       ","    0     ExtraField             SQL_Latin1_General_CP1_CI_AS  
3       SQLCHAR       0       100     ","      2     FirstName              SQL_Latin1_General_CP1_CI_AS  
4       SQLCHAR       0       100     "\r\n"   3     LastName               SQL_Latin1_General_CP1_CI_AS  
  

Note

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

次の例では、INSERT ... SELECT * FROM OPENROWSET(BULK...) フォーマット ファイルを使用して、myTestSkipField.fmt を使用します。 この例では、 myTestSkipField-c.dat データ ファイルを myTestSkipField テーブルに一括インポートします。 サンプルのテーブルとデータ ファイルを作成するには、このトピックの「サンプル データ ファイルとサンプル テーブル」を参照してください。

SQL Server Management Studio クエリ エディターで、次のコードを実行します。

USE AdventureWorks2012;  
GO  
INSERT INTO myTestSkipField   
   SELECT *  
      FROM  OPENROWSET(BULK  'C:\myTestSkipField-c.dat',  
      FORMATFILE='C:\myTestSkipField.fmt'    
       ) AS t1;  
GO   

より多くのデータ フィールドを格納するための XML フォーマット ファイル

この例で提供されるフォーマット ファイルは、別のフォーマット ファイルである myTestSkipField.xml に基づいています。このフォーマット ファイル全体では、文字データ形式が使用されます。また、フィールドの数と順序は myTestSkipField テーブルの列と完全に一致しています。 そのフォーマット ファイルの内容を表示するには、「フォーマット ファイルの作成 (SQL Server)」を参照してください。

次のフォーマット ファイル myTestSkipField.xml は、myTestSkipField-c.dat のフィールドを myTestSkipField テーブルの列にマップします。 このフォーマット ファイルでは、文字データ形式が使用されます。

myTestSkipField.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="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>  
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>  
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>  
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>  
 </RECORD>  
 <ROW>  
  <COLUMN SOURCE="1" NAME="PersonID" xsi:type="SQLSMALLINT"/>  
  <COLUMN SOURCE="3" NAME="FirstName" xsi:type="SQLNVARCHAR"/>  
  <COLUMN SOURCE="4" NAME="LastName" xsi:type="SQLNVARCHAR"/>  
 </ROW>  
</BCPFORMAT>  

次の例では、INSERT ... SELECT * FROM OPENROWSET(BULK...) フォーマット ファイルを使用して、myTestSkipField.Xml を使用します。 この例では、 myTestSkipField-c.dat データ ファイルを myTestSkipField テーブルに一括インポートします。 サンプルのテーブルとデータ ファイルを作成するには、このトピックの「サンプル データ ファイルとサンプル テーブル」を参照してください。

SQL Server Management Studio クエリ エディターで、次のコードを実行します。

USE AdventureWorks2012;  
GO  
INSERT INTO myTestSkipField   
  SELECT *  
      FROM  OPENROWSET(BULK  'C:\myTestSkipField-c.dat',  
      FORMATFILE='C:\myTestSkipField.xml'    
       ) AS t1;  
GO  
  

Note

XML スキーマの構文と XML フォーマット ファイルのその他のサンプルについては、「XML フォーマット ファイル (SQL Server)」を参照してください。

参照

bcp ユーティリティ
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
フォーマット ファイルを使用したテーブル列のスキップ (SQL Server)
フォーマット ファイルを使用したテーブル列とデータ ファイル フィールドのマッピング (SQL Server)