Я использую C # и использую 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 выполняется одновременно, он может попытаться дважды вставить строку в «Таблицу проверки продукта». 1017 *
Скажем, я получил, как один пользователь, использующий ручной способ, и другой пользователь, выполняющий массовый способ примерно в одно и то же время.
ручной способ.
1. Пользователь отправляет данные
2. Linq to sql Объект Product сделан и заполнен данными и передан.
3. этот объект теперь содержит ProductId
4. Еще один объект linq to sql создан для таблицы просмотра Продукта и вставлен (Идентификатор продукта из шага 3 передается вместе).
Массовый путь.
1. Пользователь получает данные от пользователя, который делится данными.
2. Захвачены все строки продукта от общего пользователя.
3. Произойдет массовая вставка SQL в строки Product.
4. Мой SP выбирает все строки, которые существуют только в таблице Product, и удовлетворяет некоторым другим условиям.
5. Массовая вставка происходит с этими рядами.
Так что же происходит, если шаг 3 (ручной путь) происходит одновременно с шагом 4 (массовый путь). Я думаю, что он попытается вставить одну и ту же строку дважды, что вызовет выполнение основного ограничения.