Я использую С# и используя 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.
Edit
Могу ли я сделать что-то вроде этого?
SELECT *
FROM Product
WHERE NOT EXISTS (SELECT * FROM ProductReview WHERE Product.ProductId = ProductReview.ProductId AND Product.Qty = NULL AND Product.ProductName != 'Ipad')
Это должно найти все строки, которые только что вставлены с объемной копией sql. Я не уверен, как взять результаты из этого, тогда сделайте массовую вставку с ними из SP.
Единственная проблема, которую я вижу в этом, заключается в том, что если пользователь делает записи по одному за раз, и этот оператор работает одновременно, он может попытаться дважды вставить строку в "Таблицу обзора продукта".
Так скажите, что я получил, как один пользователь, используя ручной способ, и другой пользователь делает массовый путь примерно в одно и то же время.
вручную. 1. Пользователь отправляет данные 2. Linq to sql Объект продукта создается и заполняется данными и отправляется. 3. Этот объект теперь содержит ProductId 4. Другой объект linq to sql создается для таблицы обзора продукта и вставлен (идентификатор продукта с шага 3 отправляется вместе).
Массовый путь. 1. Пользователь захватывает данные от пользователя, использующего данные. 2. Все ряды продуктов от пользователя совместного доступа захватываются. 3. Вставка SQL Bulk copy в строки Product происходит. 4. Мой SP выбирает все строки, которые существуют только в таблице Product, и удовлетворяет некоторым другим условиям 5. Массовая вставка происходит с этими строками.
Итак, что произойдет, если шаг 3 (ручной способ) происходит одновременно с шагом 4 (массовый путь). Я думаю, что он попытался бы вставить одну и ту же строку дважды, вызывая первичное ограничение.