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

简介: 做开发的时候,我们经常要在执行一条语句后 获得数据库的自增ID值,最典型的例子就是在生成订单后,要返回订单ID,之前有一种不严谨的做法是,用select top 1 ID order by ID desc,值所以不严谨有一种说法是,在高并发用户的情况下,很可能在插入和查询之间又一次进行了插入操作,这样查询的结果就和实际ID不是对应的了。

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

目录
相关文章
|
5月前
|
数据库
仅当指定列列表,且SET IDENTITY_INSERT为ON时,才能对自增列赋值
仅当指定列列表,且SET IDENTITY_INSERT为ON时,才能对自增列赋值
578 0
|
6月前
|
SQL 存储 Oracle
为什么 GROUP BY 之后不能直接引用原表中的列
为什么 GROUP BY 之后不能直接引用原表中的列
44 1
|
JavaScript 算法 索引
v-for中key值的作用
v-for中key值的作用
|
网络协议 编译器 测试技术
创建 struct 实例指定字段值 | 学习笔记
快速学习创建 struct 实例指定字段值
|
Linux C语言
利用__attribute__((section()))构建初始化函数表【转】
转自: https://mp.weixin.qq.com/s?__biz=MzAwMDUwNDgxOA==&mid=2652663356&idx=1&sn=779762953029c0e0946c22ef2bb0b754&chksm=810f28a1b678a1b747520ba3ee47c9e...
1766 0
|
Oracle 关系型数据库 数据库
[20171102]视图v$session中process字段含义
[20171102]视图v$session中process字段含义.txt --//被别人问及这个问题,自己也简单测试看看.我记忆里看warehouse的教学视频,好像提到的client端的进程号.
1118 0