博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在output 子句和 scope_identity() 混合使用的时候的注意事项
阅读量:5125 次
发布时间:2019-06-13

本文共 820 字,大约阅读时间需要 2 分钟。

无意睹到一篇旧文档

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 来分享记录一下

 

转载于:https://www.cnblogs.com/Gin-23333/p/5950307.html

你可能感兴趣的文章
lua cURL使用笔记
查看>>
jQuery之ajax的跨域获取数据
查看>>
用键盘实现上下选择
查看>>
包含对流环热,热流边界,等温边界的稳态热传导方程的FEM求解。
查看>>
然爸读书笔记(2014-5)----团队正能量
查看>>
【翻译】使用Ext JS设计响应式应用程序
查看>>
安卓学习笔记--获取网络连接状态
查看>>
leetcode 91. Decode Ways
查看>>
sql server数据库还原方法
查看>>
Android--Facebook Login without LoginButton
查看>>
CF某gym G
查看>>
web语义化与h5新增标签
查看>>
char 型数组与 char型字符串
查看>>
C# FTP 上传、下载、获取文件列表
查看>>
转:linux中fork()函数详解
查看>>
url中#号的作用
查看>>
Java中有关Null的9件事
查看>>
SpringBoot使用Jsp
查看>>
团队开发之团队介绍
查看>>
Linux下,C++编程论坛题目抽取
查看>>