星空网 > 软件开发 > 数据库

在output 子句和 scope_identity() 混合使用的时候的注意事项

无意睹到一篇旧文档

SR0008:考虑使用 SCOPE_IDENTITY 代替 @@IDENTITY :https://msdn.microsoft.com/zh-cn/library/dd172121(v=vs.100).aspx

日常开发,我们如果在插入记录的同时需要返回插入的IdentityID,通常我们会使用

@@Identity 和使用函数 Scope_identity()

当然在并发的情况下,使用scope_identity会比使用@@Identity稳定。起码我不用考虑触发器的影响。

但是如果在insert 的同时使用了insert into xxx output into yyy 这种语法的话。就要小心scope_identity返回的值。那将会是yyy表的identity值哦。

下面我们来做一个实验

CREATE TABLE aaa(ID INT IDENTITY,Col VARCHAR(50))CREATE TABLE bbb(ID INT IDENTITY,Col VARCHAR(50))INSERT INTO dbo.aaa ( Col )VALUES ( 'aaa' )INSERT INTO dbo.aaa ( Col ) OUTPUT Inserted.Col INTO bbb(Co1) VALUES ( 'aaa' )SELECT SCOPE_IDENTITY()

语句很简单,就创建2个表。然后insert 2条数据而已。但是最后在scope_identity 里面返回的结果并不是2 ,而是1 因为虽然写入aaa的自增列ID是1 ,但是本会话最新创建的identity确实bbb id = 1 所以返回的结果是1 而不是2

因为做测试遇到这个例子,写一篇blog 来分享记录一下

 




原标题:在output 子句和 scope_identity() 混合使用的时候的注意事项

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

情人节旺季将至,宠物用品销量有望暴涨一波:https://www.ikjzd.com/articles/141804
注意!亚马逊推出“支付服务商计划”,我们应如何应对?:https://www.ikjzd.com/articles/141805
【第十六期】shopify官方出品app之销售渠道:https://www.ikjzd.com/articles/141806
防不胜防!近期侵权问题频发,这些红线千万别踩:https://www.ikjzd.com/articles/141807
贝佐斯将卸任亚马逊CEO,出任董事会执行主席:https://www.ikjzd.com/articles/141808
如何使用Elementor的图标列表功能:https://www.ikjzd.com/articles/141809
我们是否应该使用AI工具为网站创作长篇内容:https://www.kjdsnews.com/a/1836638.html
怎样做出一个有利可图的SaaS产品?:https://www.kjdsnews.com/a/1836639.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流