質問: 私は一括レコードを挿入する**SqlBulkCopy**クラスを使用していますが、私はその値の助けを借りて子テーブル(外部キー)を再生しようとしているので、新しく生成された`auto-increment`値(プライマリキーは、 。 明確な画像を得るには、以下の例に従ってください。 ソーステーブル:テーブル作成StagingTable(personName varchar(50))StaginTable値( 'Test1')への挿入.. .. StaginTable値( 'Test10,000')への挿入 **ターゲットテーブル:ターゲットテーブルの**作成(personId int identity(1,1)、personName varchar(50))TargetTable値( 'Already1')への挿入.. TargetTable値( 'Already10')への挿入 今、私は10個のレコードをpersonId(1〜10)の10個のレコードでTargetTableに持っているので、StagingTableからTargetTableに10,000レコードを挿入して10,010個のレコードにすることです。 SQL Server 2012のマージ概念の助けを借りて。 プロシージャを作成するMerge_GetNewIdentityValues MERGE TargetTable AS T StagingTableを使用してSをオンにする1!= 1一致しない場合、insert(personName)値(S.StagingTable)の出力inserted.personId; - IDフィールドの値を取得する[新しく挿入された値] どのようにこれを並行処理することができますか? 「挿入された」キーワードが別のコンテキストで再生されるのか、別のユーザーが同じストアドプロシージャを呼び出すために使用される単一のコンテキストで再生するのか ありがとう、S.Venkatesh
回答: 宛先テーブルにIDを割り当てるには、 `SqlBulkCopyOptions.KeepIdentity`オプションを使用しないでください。代わりに、ソースからIDをマップしないで、ソースから抽出して`SqlBulkCopy`に送信しないで`SqlBulkCopy` 。