我正在使用 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 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 批量复制的所有行。我不确定如何从中获取结果,然后从 SP 对它们进行批量插入。
我能看到的唯一问题是,如果用户一次只做一个记录,并且这条语句同时运行,它可能会尝试在“产品评论表”中插入一行两次。
所以说我喜欢一个用户使用手动方式,而另一个用户大约同时使用大众方式。
手动方式。 1. 用户提交数据 2. Linq to sql 制作产品对象并用数据填充并提交。3. 此对象现在包含 ProductId 4. 为 Product review 表创建另一个 linq to sql 对象并插入(同时发送步骤 3 中的 Product Id)。
大众方式。 1. 用户从共享数据的用户那里获取数据。2. 抓取分享用户的所有产品行。3. 发生在产品行上的 SQL 批量复制插入。4. 我的 SP 选择了仅存在于 Product 表中并满足其他一些条件的所有行 5. 对这些行进行批量插入。
那么如果步骤 3(手动方式)与步骤 4(大众方式)同时发生会发生什么。我认为它会尝试两次插入同一行,从而导致主要约束执行。