У меня 2 стола. Ниже приведены лишь урезанные версии этих таблиц.
TableA
Id <pk> incrementing
Name varchar(50)
TableB
TableAId <pk> non incrementing
Name varchar(50)
Теперь эти таблицы связаны друг с другом.
Сценарий
Пользователь 1 заходит на мой сайт и выполняет некоторые действия (в данном случае добавляет строки в таблицу A). Поэтому я использую SqlBulkCopy все эти данные в таблице A.
Однако мне нужно добавить данные также в таблицу B, но я не знаю вновь созданных идентификаторов из таблицы A, поскольку SQLBulkCopy не вернет их.
Поэтому я думаю о хранимой процедуре, которая находит все идентификаторы, которых нет в таблице B, а затем вставляет их.
INSERT INTO TableB (TableAId , Name)
SELECT Id,Name FROM TableA as tableA
WHERE not exists( ...)
Однако это сопряжено с проблемой. Пользователь в любое время может удалить что-то из таблицы B, поэтому, если пользователь удалит, скажем, строку, а затем появится другой пользователь или даже тот же пользователь придет и сделает что-то с таблицей A, моя хранимая процедура вернет эту удаленную строку в таблице B. Поскольку он по-прежнему будет существовать в таблице A, но не в таблице B, и, таким образом, будет удовлетворять условию хранимой процедуры.
Итак, есть ли лучший способ работы с двумя таблицами, которые необходимо обновить при использовании массовой вставки?