做开发的时候,我们经常要在执行一条语句后 获得数据库的自增ID值,最典型的例子就是在生成订单后,要返回订单ID,之前有一种不严谨的做法是,用select top 1 ID order by ID desc,值所以不严谨有一种说法是,在高并发用户的情况下,很可能在插入和查询之间又一次进行了插入操作,这样查询的结果就和实际ID不是对应的了。
其实这个需求最终的准确解决方法是使用
scope_identity()
返回相同范围内最后插入表的标识值,这个范围可以是存储过程,触发器或者是批处理。
上面的解释同样适用于为什么不能适用与scope_identity 类似的系统函数
@@identity
另外我们可以使用 identitycol自动指向表中有identity属性的列,例如:
select identitycol from customer 和
select cust_id from customer 是一样的效果