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

时间:2010-08-06 08:37:52

标签: sql sql-server sql-server-2008

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

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

8 个答案:

答案 0 :(得分:15)

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

任何要求最大值/ top 1的技术都会遇到竞争条件,即同时添加2个人,然后在寻找最高ID时会返回相同的ID。

答案 1 :(得分:14)

SELECT IDENT_CURRENT('Table')

您可以使用以下示例之一:

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

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

第二个解决方案相当于第三个解决方案(两者都需要扫描表以获取最大ID)。

答案 2 :(得分:11)

1.  SELECT MAX(Id) FROM Table

答案 3 :(得分:6)

您可以尝试:

SELECT id FROM your_table WHERE id = (SELECT MAX(id) FROM your_table)

其中idyour_table

的主键

答案 4 :(得分:3)

我认为这个也会奏效:

  

SELECT * FROM ORDER BY id DESC LIMIT 0,1

答案 5 :(得分:2)

还有一种方法 -

select * from <table> where  id=(select max(id) from <table>)

您也可以查看此链接 -

http://msdn.microsoft.com/en-us/library/ms175098.aspx

答案 6 :(得分:2)

如果你的意思是选择插入的最后一条记录的ID,那么

SELECT @@IDENTITY FROM table

答案 7 :(得分:0)

从表名中选择最后一个(行名)