从表中获取最后一个记录ID的最安全方法

mar*_*are 20 sql sql-server sql-server-2008

在SQL Server 2008及更高版本中,什么是最好/最安全/最正确的方法

  1. 从数据库表中检索ID(基于自动增量主键)?
  2. 检索其他列的最后一行的值(例如,SELECT TOP 1 FROM Table ORDER BY DESC)?

小智 16

SELECT IDENT_CURRENT('Table')
Run Code Online (Sandbox Code Playgroud)

您可以参加以下考试之一:

SELECT * FROM Table 
WHERE ID = (
    SELECT IDENT_CURRENT('Table'))

SELECT * FROM Table
WHERE ID = (
    SELECT MAX(ID) FROM Table)

SELECT TOP 1 * FROM Table
ORDER BY ID DESC
Run Code Online (Sandbox Code Playgroud)

但是第一个将更有效,因为不需要索引扫描(如果您在Id列上有索引).

第二个解决方案相当于第三个解决方案(它们都需要扫描表以获得最大ID).


And*_*rew 15

最安全的方法是在插入行的过程中输出或返回scope_identity(),然后根据该ID检索行.应避免使用@@ Identity,因为在触发器处于运行状态时,您可以获得不正确的ID.

任何要求最大值/前1的技术都会遇到竞争条件,其中2个人同时添加,然后在他们寻找最高ID时获得相同的ID.


小智 7

你可以试试:

SELECT id FROM your_table WHERE id = (SELECT MAX(id) FROM your_table)
Run Code Online (Sandbox Code Playgroud)

哪个id是主键your_table

  • 欢迎来到Stack Overflow!这个问题已经有了一个可接受的答案,而且还有4年之久.在这种情况下,没有额外的答案needend. (3认同)
  • @j_s_stack,他给出了一个更好的答案,那你为什么要这样做呢? (2认同)

Pel*_*ier 5

我认为这个也可以工作:

SELECT * FROM ORDER BY id DESC LIMIT 0 , 1