4

我有两个表:缺陷和缺陷数据。每个缺陷可能有也可能没有一个或多个缺陷数据。因为这样的DefectData有一个DefectId列作为外键。当插入带有自动增量的表格时维护外键关系Id的

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

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

  1. 插入缺陷
  2. 获取该缺陷的ID
  3. 插入DefectData(零或多个)与标识从2

上,然后用我自己的ID将不会因为这样的工作环境IdentityInsert由网络服务器运行,并可能有并发呼叫(我是否在这里?)。

Diagram

在此先感谢。

回答

5

的基本模式是这样使用SCOPE_IDENTITY()从缺陷获得新的行ID

BEGIN TRAN 

INSERT Defect() 
VALUES (...) 

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

COMMIT TRAN 
+1

您通常需要到新的标识值存储在一个局部变量,'SET @NewId = SCOPE_IDENTITY( )',用于进一步的工作或处理或将其返回给应用程序供将来参考。 –

+0

谢谢。我现在就试试这个。如果这个结构被链接,我会嵌套BEGIN TRAN? – TheGwa

+0

@TheGwa:呃..不知道你的意思。这将是一个新的问题或看到这个http://stackoverflow.com/questions/2073737/nested-stored-procedures-containing-try-catch-rollback-pattern/2074139#2074139 – gbn