私は2つのテーブルを持っています。以下は、これらのテーブルの簡略版です。
TableA
Id <pk> incrementing
Name varchar(50)
TableB
TableAId <pk> non incrementing
Name varchar(50)
これで、これらのテーブルは相互に関係があります。
シナリオ
ユーザー1が私のサイトにアクセスし、いくつかのアクションを実行します(この場合、テーブルAに行を追加します)。したがって、表AのすべてのデータをSqlBulkCopyを使用します。
ただし、テーブルBにもデータを追加する必要がありますが、SQLBulkCopyがこれらを返さないため、テーブルAから新しく作成されたIDがわかりません。
そのため、表Bに存在しないすべてのIDを検索し、それらをに挿入するストアドプロシージャを作成することを考えています。
INSERT INTO TableB (TableAId , Name)
SELECT Id,Name FROM TableA as tableA
WHERE not exists( ...)
ただし、これには問題があります。ユーザーはいつでもTableBから何かを削除できるため、ユーザーがたとえば行を削除してから別のユーザーが来たり、同じユーザーが来てテーブルAに何かをしたりすると、ストアドプロシージャはテーブルBの削除された行を戻します。これは、テーブルAにはまだ存在しますが、テーブルBには存在しないため、ストアドプロシージャの条件を満たすためです。
では、一括挿入を使用するときに更新する必要がある2つのテーブルを処理するためのより良い方法はありますか?