次の方法で共有


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

データ ファイルには、テーブル内の列数よりも多くのフィールドを含めることができます。 このトピックでは、テーブル列を対応するデータ フィールドにマッピングし、追加のフィールドを無視して、より多くのフィールドを含むデータ ファイルに対応するように XML 以外のフォーマット ファイルと XML 形式ファイルの両方を変更する方法について説明します。

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

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

このトピックの変更されたフォーマット ファイルの例は、次の表とデータ ファイルに基づいています。

サンプル テーブル

この例では、dbo スキーマの下の AdventureWorks2012 サンプル データベースに、myTestSkipFieldという名前のテーブルを作成する必要があります。 このテーブルを作成するには、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.fmtmyTestSkipField-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  
  

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

例示

次の例では、myTestSkipField.fmt フォーマット ファイルを使用して INSERT ... SELECT * FROM OPENROWSET(BULK...) を使用します。 この例では、 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.xmlmyTestSkipField-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  
  

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

こちらもご覧ください

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