次の方法で共有


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

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

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

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

コマンド キープアイデンティティ修飾子 修飾子の種類
bcp -E スイッチ
BULK INSERT アイデンティティを維持 引数
挿入する。。。SELECT * FROM OPENROWSET(BULK...) KEEPIDENTITY テーブルのヒント

詳細については、「 bcp ユーティリティBULK INSERT (Transact-SQL)OPENROWSET (Transact-SQL)INSERT (Transact-SQL)SELECT (Transact-SQL)テーブル ヒント (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  

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

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

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

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

ある。 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 フォーマット・ファイルを使用し、KEEPIDENTITY オプションを組み込んで、データ・ファイル内の ID 値が確実に保持されるようにします。

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 フォーマット ファイルを使用し、KEEPIDENTITY ヒントを含め、データ ファイル内の ID 値が確実に保持されるようにします。

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  
  

関連タスク

フォーマット ファイルを使用するには

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

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)