我有 2 张桌子。以下只是这些表的精简版。
TableA
Id <pk> incrementing
Name varchar(50)
TableB
TableAId <pk> non incrementing
Name varchar(50)
现在这些表彼此之间有关系。
设想
用户 1 来到我的站点并执行了一些操作(在这种情况下,将行添加到表 A)。所以我使用 SqlBulkCopy 表 A 中的所有这些数据。
但是,我还需要将数据添加到表 B,但我不知道表 A 中新创建的 Id,因为 SQLBulkCopy 不会返回这些。
所以我正在考虑有一个存储过程来查找表 B 中不存在的所有 id,然后将它们插入。
INSERT INTO TableB (TableAId , Name)
SELECT Id,Name FROM TableA as tableA
WHERE not exists( ...)
然而,这带来了一个问题。用户可以随时从 TableB 中删除某些内容,因此如果用户删除了一行,然后另一个用户出现,或者甚至同一个用户出现并对表 A 执行某些操作,我的存储过程将在表 B 中恢复该删除的行。因为它仍然存在于表 A 但不存在于表 B 中,因此满足存储过程条件。
那么有没有更好的方法来处理使用批量插入时需要更新的两个表?