mar*_*are 20 sql sql-server sql-server-2008
在SQL Server 2008及更高版本中,什么是最好/最安全/最正确的方法
小智 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