代码改变世界

使用 scope_identity() 函数获得表的标识值

2011-09-06 13:58  dreamhappy  阅读(711)  评论(1编辑  收藏  举报

做开发的时候,我们经常要在执行一条语句后 获得数据库的自增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 是一样的效果