插入具有自动增量Id的表时保持外键关系

时间:2011-08-25 13:53:18

标签: sql sql-server-2008 insert foreign-key-relationship identity-column

我有两个表:缺陷和缺陷数据。每个缺陷可能有也可能没有一个或多个缺陷数据。因此,DefectData将DefectId列作为外键。

两个表中的Id都是自动增量标识。

我遇到的问题是,当我想插入一个新的缺陷及其缺陷数据时,首先插入缺陷并获取一个Id,但我不知道该ID是给DefectData的。我的解决方案是从匹配插入数据的缺陷中选择以获得Id。

  1. 插入缺陷
  2. 获取该缺陷的ID
  3. 使用2的Id插入DefectData(零或多个)。
  4. 设置IdentityInsert然后插入我自己的ID将无法正常工作,因为这是由网络服务器运行的,并且可能有并发呼叫(我在这里吗?)。

    Diagram

    提前致谢。

1 个答案:

答案 0 :(得分:5)

基本模式是使用SCOPE_IDENTITY()从缺陷

获取新的行ID
BEGIN TRAN

INSERT Defect ()
VALUES (...)

INSERT DefectData (DefectID, AdditionalNotes, ...)
VALUES (SCOPE_IDENTITY(), @AdditionalNotes, ...)

COMMIT TRAN