Я использую С# и использую SqlBulkCopy. У меня есть проблема. Мне нужно сделать массовую вставку в одну таблицу, а затем другую массовую вставку в другую таблицу.
Эти 2 имеют отношение PK/FK.
Table A
Field1 -PK auto incrementing (easy to do SqlBulkCopy as straight forward)
Table B
Field1 -PK/FK - This field makes the relationship and is also the PK of this table. It is not auto incrementing and needs to have the same id as to the row in Table A.
Таким образом, эти таблицы имеют отношение один к одному, но я не уверен, как вернуть все те идентификаторы PK, которые были сделаны при массовой вставке, поскольку они мне нужны для таблицы B.
Изменить
Могу ли я сделать что-то подобное?
SELECT *
FROM Product
WHERE NOT EXISTS (SELECT * FROM ProductReview WHERE Product.ProductId = ProductReview.ProductId AND Product.Qty = NULL AND Product.ProductName != 'Ipad')
Это должно найти все строки, которые были только что вставлены с массовой копией sql. Я не уверен, как взять результаты из этого, а затем сделать массовую вставку с ними из SP.
Единственная проблема, которую я вижу в этом, заключается в том, что если пользователь делает записи по одной и оператор this запускается одновременно, он может попытаться дважды вставить строку в «Таблицу обзора продукта».
Итак, скажем, у меня есть один пользователь, использующий ручной способ, и другой пользователь, использующий массовый способ примерно в одно и то же время.
ручной способ. 1. Пользователь отправляет данные 2. Объект продукта Linq to sql создается, заполняется данными и отправляется. 3. этот объект теперь содержит ProductId 4. Другой объект linq to sql создается для таблицы обзора продуктов и вставляется (идентификатор продукта из шага 3 отправляется вместе).
Массовый способ. 1. Пользователь получает данные от пользователя, который поделился данными. 2. Все строки продукта от пользователя, предоставляющего общий доступ, захватываются. 3. Происходит массовая вставка копии SQL в строки продукта. 4. Мой SP выбирает все строки, которые существуют только в таблице Product и удовлетворяют некоторым другим условиям. 5. С этими строками происходит массовая вставка.
Итак, что происходит, если шаг 3 (ручной способ) происходит одновременно с шагом 4 (массовый способ). Я думаю, что он попытается вставить одну и ту же строку дважды, что приведет к исключению основного ограничения.