在SQL Server 2008及更高版本中,什么是最好/最安全/最正确的方式
答案 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)
其中id
是your_table
答案 4 :(得分:3)
我认为这个也会奏效:
SELECT * FROM ORDER BY id DESC LIMIT 0,1
答案 5 :(得分:2)
还有一种方法 -
select * from <table> where id=(select max(id) from <table>)
您也可以查看此链接 -
答案 6 :(得分:2)
如果你的意思是选择插入的最后一条记录的ID,那么
SELECT @@IDENTITY FROM table
答案 7 :(得分:0)
从表名中选择最后一个(行名)