SQL-Server常见问题 - 检索刚刚插入的ID

时间:2010-10-05 12:16:16

标签: sql sql-server

我看了一些其他问题,它们似乎与SQL-Server无关。

给出简单的示例查询:

INSERT INTO tblComments (comment, user) VALUES ('lol', 'Guest')

现在假设在创建新用户之后我需要在需要最后输入ID的其他表中插入更多数据,我会这样做:

SELECT TOP 1 ID FROM tblComments ORDER BY ID DESC

要检索最后输入的ID,(希望)在此期间没有执行任何查询,并且返回的ID确实是前一个查询的值。

我确保我的表格正常化,但是我有时遇到插入的值可能不一定是唯一的情况,那么如何保证返回的ID是最后一个插入的?

2 个答案:

答案 0 :(得分:6)

您的方法受竞争条件限制。

相反,请使用SCOPE_IDENTITY

select scope_identity()

答案 1 :(得分:0)

除了@ RedFilter的建议外,您还应该看看:

  1. @@ IDENTITY如果你想要最后一个 插入任何人的身份 即使插入未完成,当前会话中的表也是如此 在当前范围内。
  2. IDENT_CURRENT来获取最后一个 插入特定表中的标识 无论会话或范围如何。
  3. 在您的情况下,SCOPE_IDENTITY可能是要走的路,除非您想要获得该身份,即使它被插入到不同的会话或范围中。

    为了清楚起见,SCOPE_IDENTITY返回插入当前会话和范围中任何表的最后一个标识。