Share via


データの一括インポート時の ID 値の保持 (SQL Server)

ID 値を含んでいるデータ ファイルを Microsoft SQL Server のインスタンスに一括インポートできます。 既定では、インポートされたデータ ファイルの ID 列の値は無視され、 SQL Server によって固有の値が自動的に割り当てられます。 固有の値は、テーブル作成時に指定されたシード値と増分値に基づいています。

データ ファイルにテーブルの ID 列の値が含まれていない場合は、フォーマット ファイルを使用してデータをインポートするときにテーブルの ID 列をスキップするように指定します。 SQL Serverは、列の一意の値を自動的に割り当てます。

テーブルにデータ行を一括インポートするときに SQL Server が ID 値を割り当てないようにするには、適切な keep-identity コマンド修飾子を使用します。 keep-identity 修飾子を指定すると、 SQL Server ではデータ ファイルの ID 値を使用します。 このような修飾子は次のとおりです。

command Keep-identity 修飾子 修飾子の種類
bcp -E Switch
BULK INSERT KEEPIDENTITY 引数
INSERT ...SELECT * FROM OPENROWSET(BULK...) KEEPIDENTITY テーブル ヒント

詳細については、「bcp ユーティリティ」、「BULK INSERT (Transact-SQL)」、「OPENROWSET (Transact-SQL)」、「INSERT (Transact-SQL)」、「SELECT (Transact-SQL)」、「Table Hints (Transact-SQL)」を参照してください。

注意

複数のテーブルで使用できる自動的に増分する番号、またはテーブルを参照せずにアプリケーションから呼び出すことができる自動的に増分する番号を作成するには、「シーケンス番号」を参照してください。

このトピックの例では、INSERT ... SELECT * FROM OPENROWSET(BULK...) を使用し、既定値を維持して、データを一括インポートします。

サンプル テーブル

この一括インポートの例では、dbo スキーマの下にある AdventureWorks サンプル データベースで myTestKeepNulls というテーブルを作成する必要があります。 このテーブルを作成するには SQL Server Management Studio クエリ エディターで、次を実行します。

USE AdventureWorks;  
GO  
SELECT * INTO HumanResources.myDepartment   
   FROM HumanResources.Department  
      WHERE 1=0;  
GO  
SELECT * FROM HumanResources.myDepartment;  

myDepartment の基になる Department テーブルには IDENTITY_INSERT があり、OFF に設定されています。 したがって、ID 列にデータをインポートするには、KEEPIDENTITY または -E を指定する必要があります。

サンプル データ ファイル

一括インポートの例で使用したデータ ファイルには、ネイティブ形式で HumanResources.Department テーブルから一括エクスポートされたデータが含まれています。 データ ファイルを作成するには、Microsoft Windows コマンド プロンプトで、次のように入力します。

bcp AdventureWorks.HumanResources.Department out myDepartment-n.Dat -n -T  

サンプル フォーマット ファイル

この一括インポートの例では myDepartment-f-x-n.Xml という XML フォーマット ファイルを使用します。ここではネイティブのデータ形式が使用されています。 この例では、bcp を使用して、HumanResources.Department データベースの AdventureWorks テーブルからこのフォーマット ファイルを作成します。 Windows のコマンド プロンプトで、次のように入力します。

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

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

A. bcp を使用して ID 値を保持する方法

次の例では、bcp を使用してデータを一括インポートするときに ID 値を保持する方法について説明します。 bcp コマンドは、フォーマット ファイル myDepartment-f-n-x.Xml を使用し、次のスイッチを含んでいます。

修飾子 説明
-E データ ファイルの ID 値を ID 列に使用するように指定します。
-T ユーティリティが信頼された接続をbcp使用してSQL Serverに接続することを指定します。

Windows のコマンド プロンプトで、次のように入力します。

bcp AdventureWorks.HumanResources.myDepartment in C:\myDepartment-n.Dat -f C:\myDepartment-f-n-x.Xml -E -T  
  

B. BULK INSERT を使用して ID 値を保持する方法

次の例では、BULK INSERT を使用して、myDepartment-c.Dat ファイルから AdventureWorks.HumanResources.myDepartment テーブルにデータを一括インポートします。 このステートメントは、myDepartment-f-n-x.Xml フォーマット ファイルを使用し、データ ファイル内の任意の ID 値が必ず保持されるように KEEPIDENTITY オプションを含んでいます。

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

USE AdventureWorks;  
GO  
DELETE HumanResources.myDepartment;  
GO  
BULK INSERT HumanResources.myDepartment  
   FROM 'C:\myDepartment-n.Dat'  
   WITH (  
      KEEPIDENTITY,  
      FORMATFILE='C:\myDepartment-f-n-x.Xml'  
   );  
GO  
SELECT * FROM HumanResources.myDepartment;  
  

C. OPENROWSET を使用して ID 値を保持する方法

次の例では、OPENROWSET 一括行セット プロバイダーを使用して、myDepartment-c.Dat ファイルから AdventureWorks.HumanResources.myDepartment テーブルにデータを一括インポートします。 このステートメントは、myDepartment-f-n-x.Xml フォーマット ファイルを使用し、データ ファイル内の任意の ID 値が必ず保持されるように KEEPIDENTITY ヒントを含んでいます。

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

USE AdventureWorks;  
GO  
DELETE HumanResources.myDepartment;  
GO  
  
INSERT INTO HumanResources.myDepartment  
   with (KEEPIDENTITY)  
   (DepartmentID, Name, GroupName, ModifiedDate)  
   SELECT *  
      FROM  OPENROWSET(BULK 'C:\myDepartment-n.Dat',  
      FORMATFILE='C:\myDepartment-f-n-x.Xml') as t1;  
GO  
  

Related Tasks

フォーマット ファイルを作成するには

一括インポートまたは一括エクスポートのデータ形式を使用するには

bcp を使用した互換性のためのデータ形式を指定するには

  1. フィールド ターミネータと行ターミネータの指定 (SQL Server)

  2. bcp を使用したデータ ファイルのプレフィックス長の指定 (SQL Server)

  3. bcp を使用したファイル ストレージ型の指定 (SQL Server)

参照

BACKUP (Transact-SQL)
bcp ユーティリティ
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
テーブル ヒント (Transact-SQL)