有可能在SQL BulkCopy之后获得PrimayKey ID吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (38)

我使用的是C#和SqlBulkCopy。不过我有个问题。我需要在一个表中插入一个mass,然后在另一个表中插入另一个mass。

这两个有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与他们的大量插入。

我能看到的唯一问题是,如果用户每次只做一个记录,而这个语句同时运行,它可以尝试将一行插入到“ProductReview Table”中两次。

假设我有一个用户使用手动方式,另一个用户同时使用大量的方式。

提问于
用户回答回答于

     -- dummy schema
     CREATE TABLE TMP (data varchar(max))
     CREATE TABLE [Table1] (id int not null identity(1,1), data varchar(max))
     CREATE TABLE [Table2] (id int not null identity(1,1), id1 int not null, data varchar(max))

     -- imagine this is the SqlBulkCopy
     INSERT TMP VALUES('abc')
     INSERT TMP VALUES('def')
     INSERT TMP VALUES('ghi')

     -- now push into the real tables
     INSERT [Table1]
     OUTPUT INSERTED.id, INSERTED.data INTO [Table2](id1,data)
     SELECT data FROM TMP
用户回答回答于

如果应用程序允许,您可以添加另一列,在其中存储大容量插入的标识符(例如GUID)。您将显式地设置这个id。

然后,在大容量插入之后,只需选择具有该标识符的行。

扫码关注云+社区