代码之家  ›  专栏  ›  技术社区  ›  Tom Gullen

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

  •  2
  • Tom Gullen  · 技术社区  · 14 年前

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

    给出一个简单的查询示例:

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

    现在假设在创建新用户之后,我需要在需要最后输入的ID的其他表中插入更多数据,我将执行以下操作:

    SELECT TOP 1 ID FROM tblComments ORDER BY ID DESC
    

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

    我确实保持了表的规范化,但是有时会遇到插入的值不一定是唯一的情况,因此如何保证返回的ID是最后一个插入的ID?

    2 回复  |  直到 14 年前
        1
  •  6
  •   D'Arcy Rittich    14 年前

    你的进近受到比赛条件的限制。

    相反,使用 SCOPE_IDENTITY

    select scope_identity()
    
        2
  •  0
  •   Abe Miessler    14 年前

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

    1. @@如果你想要最后一个 插入到任何 当前会话中的表,即使插入未完成
    2. 获取最后一个 在特定表中插入的标识

    在您的情况下,SCOPE\u标识可能是一种可行的方法,除非您希望获得该标识,即使它被插入到不同的会话或作用域中。

    为了清楚起见,SCOPE\u IDENTITY返回插入到当前会话和作用域中任何表中的最后一个标识。