在sql server中获取最后一条插入记录的最佳方法

时间:2014-02-24 10:10:14

标签: sql-server-2008

大家好我在我的表中有一个Identity列和一个Computed主键列我需要在将记录插入数据库后立即获取最后一个插入的记录,所以我写了以下查询可以有人告诉哪个是最好的选择

SELECT
t.[StudentID]
FROM
[tbl_Student] t
WHERE
t.ID = IDENT_CURRENT('tbl_Student')

另一个使用MAX如下

Select 
MAX(StudentID) 
from tbl_Student

从以上两个查询中选择最佳的查询。

2 个答案:

答案 0 :(得分:4)

根据technet的说法,MAX和IDENT_CURRENT的行为大致相同,两者同样不可靠。

“IDENT_CURRENT不受范围和会话的限制;它仅限于指定的表.IDENT_CURRENT返回在任何会话和任何范围内为特定表生成的标识值。有关详细信息,请参阅IDENT_CURRENT(Transact- SQL)。“

基本上,要返回当前作用域中的最后一个插入,无论是否有任何潜在的触发器或其他会话的插入/删除,都应使用SCOPE_IDENTITY。当然,假设您在与第一个实际插入相同的范围内运行查询。 :)

如果您是,您还可以使用OUTPUT子句将插入的ID值放入表变量/临时表中,并从中进行选择。

答案 1 :(得分:2)

原始答案,我对IDENT_CURRENT的假设错误。

使用第一个。 IDENT_CURRENT应该为您提供当前连接的最后一项。如果其他人同时插入另一名学生IDENT_CURRENT将为两个客户提供正确的价值,而MAX可能会给您一个错误的价值。

编辑:

正如在其他答案中提到的那样IDENT_CURRENTMAX在并发使用的情况下同样不可靠。我仍然会选择IDENT_CURRENT,但如果您想获取当前范围或会话使用的最后一个标识,则可以使用函数@@IDENTITYSCOPE_IDENTITY。此technet article解释了IDENT_CURRENT@@IDENTITYSCOPE_IDENTITY之间的详细差异。