我正在使用C#和SqlBulkCopy进行操作。但是我遇到了一个问题。我需要在一张表中进行批量插入,然后在另一张表中进行另一批量插入。
这两个表之间存在主键/外键关系。
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.
所以这些表有一个一对一的关系,但我不确定如何获取批量插入中生成的所有主键ID,因为我需要它们用于表B。
编辑
我可以像这样做吗?
SELECT *
FROM Product
WHERE NOT EXISTS (SELECT * FROM ProductReview WHERE Product.ProductId = ProductReview.ProductId AND Product.Qty = NULL AND Product.ProductName != 'Ipad')
这应该可以找到所有刚刚使用 SQL 批量复制插入的行。我不确定如何从中获取结果,然后通过存储过程批量插入它们。唯一的问题是,如果一个用户一次只插入一条记录,并且此时另一个用户运行此语句,它可能会尝试将一行两次插入“产品评论表”中。因此,假设有一个用户手动进行记录,而另一个用户同时使用批量方式。手动方式:1. 用户提交数据 2. 创建 Linq to sql Product 对象并填充数据并提交。3. 此对象现在包含 ProductId。4. 为 "Product Review Table" 创建另一个 linq to sql 对象并插入(Product Id 从步骤 3 发送) 。批量方式:1. 用户从共享数据的用户那里获取数据。2. 获取来自共享用户的所有产品行。3. 在产品行上发生 SQL 批量复制插入。4. 我的存储过程选择仅存在于 Product 表格中且符合其他条件的所有行。5. 使用这些行进行批量插入。如果步骤 3 (手动方式) 与步骤 4 (批量方式) 同时发生会发生什么?我认为它会尝试插入相同的行两次,导致主键约束异常。