IDENTITY、SCOPE_IDENTITY、IDENT_CURRENT的分析
https://www.cnblogs.com/daihuiquan/archive/2013/03/18/2956845.html
IDENT_CURRENT、IDENTITY、SCOPE_IDENTITY区别
概念解释
IDENT_CURRENT returns the last identity value generated for a specific table in any session and any scope.
IDENTITY returns the last identity value generated for any table in the current session, across all scopes.
SCOPE_IDENTITY returns the last identity value generated for any table in the current session and the current scope.
查找到有中文解释,但还是发现用英文解释,更容易理解。
IDENT_CURRENT,为指定表的所有会话和所有作用域生成的最后一个标识值;
IDENTITY,为当前会话的所有表和所有作用域的最后一个标识值;
SCOPE_IDENTITY,当前会话和当前作用域的所有表的最后一个标识值;
SQL说明

CREATE TABLE Test1(id int IDENTITY);
CREATE TABLE Test2(id int IDENTITY(100,1));
GO
CREATE TRIGGER Test1ins ON Test1 FOR INSERT
AS
BEGIN
INSERT Test2 DEFAULT VALUES
END;
GO
--End of trigger definition SELECT id FROM Test1;
--IDs empty.
SELECT id FROM Test2;
--ID is empty. --Do the following in Session 1
INSERT Test1 DEFAULT VALUES;
SELECT @@IDENTITY;
/*Returns the value 100. This was inserted by the trigger.*/ SELECT SCOPE_IDENTITY();
/* Returns the value 1. This was inserted by the
INSERT statement two statements before this query.*/ SELECT IDENT_CURRENT('Test2');
/* Returns value inserted into Test2, that is in the trigger.*/ SELECT IDENT_CURRENT('Test1');
/* Returns value inserted into Test1. This was the INSERT statement four statements before this query.*/

所有在执行insert 表A、B、C的事务时候,取IDENT_CURRENT("A")的时候,又没有及时将此ident插入相应记录D,而这个记录表D又要求插入的ident有唯一索引。这时就可能出现唯一索引重复插入失败,因为,在执行事务的时候其它会话,可能已经将此ident插入记录表D。所以这时候用SCOPE_IDENTITY更稳健一点。
补充
session和scope 在博客园找到的概念是这样的:
一个作用域 就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。
会话 一个用户连接产生的所有上下文信息。一个查询分析器窗口就是一个会话
但是一个用户connection代表一个session,这个好像不对。
A connection represents the external connection to the server (over a network or locally through shared memory for example).
A session represents a user process within SQL Server.
A connection may be associated with zero, one, or many sessions.
Take a look at the columns on sys.dm_exec_connections and sys.dm_exec_sessions. That should give you a feel for the differences.
sys.dm_exec_connections http://msdn.microsoft.com/zh-cn/library/ms181509.aspx
sys.dm_exec_sessions http://msdn.microsoft.com/zh-cn/library/ms176013.aspx
IDENTITY、SCOPE_IDENTITY、IDENT_CURRENT的分析的更多相关文章
- 糟糕的@@identity,SCOPE_IDENTITY ,IDENT_CURRENT
在某数据库里面,某甲用@@identity来获取最近插入的id值,当在多人环境,发生获取到null值的问题. 那么@@identity是否有存在的必要? 感觉像生个孩子,多了个指头. 有的数据库的ge ...
- IDENT_CURRENT ,@@identity,SCOPE_IDENTITY() 之间对比
获取表的标识值,有3种比较常见的用法 IDENT_CURRENT ,@@identity,SCOPE_IDENTITY(),有啥不一样呢? 3个关键字在联机手册中的解释 IDENT_CURRENT ...
- [MSSQL]SCOPE_IDENTITY,IDENT_CURRENT以及@@IDENTITY的区别
简单解释下SCOPE_IDENTITY函数,IDENT_CURRENT函数以及@@IDENTITY全局变量的区别 SCOPE_IDENTITY函数返回当前作用域内,返回最后一次插入数据表的标识,意思是 ...
- @@identity, scope_identity ident_current 的区别
- SQL SERVER-identity | @@identity | scope_identity
主键自增 IDENTITY(1,1),MS SQL Server 使用 IDENTITY 关键字来执行 auto-increment 任务. 在上面的实例中,IDENTITY 的开始值是 1,每条新记 ...
- SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY
SCOPE_IDENTITY.IDENT_CURRENT 和 @@IDENTITY SQL Server 2000中,有三个比较类似的功能:他们分别是:SCOPE_IDENTITY.IDENT_CUR ...
- @@identity、scope_identity()、IDENT_CURRENT('tablename')函数的区别
@@IDENTITY 和SCOPE_IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值.但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值:@@IDENTITY 不受限于 ...
- Part 4 Identity Column in SQL Server
Identity Column in SQL Server If a column is marked as an identity column, then the values for this ...
- ASP.NET Core Identity Hands On(2)——注册、登录、Claim
上一篇文章(ASP.NET Core Identity Hands On(1)--Identity 初次体验)中,我们初识了Identity,并且详细分析了AspNetUsers用户存储表,这篇我们将 ...
随机推荐
- mysql substring()函数,字符串分割
mysql> select * from test; +----+------------+-------+-----------+ | id | name | score | subject ...
- 微信小程序 报错Failed to load image
加载网络图片WXML代码: <image class="userinfo-avatar" src="{{avatarUrl}}"></imag ...
- ICEM——对msh文件或者cas文件重新划分边界
原视频下载地址:https://pan.baidu.com/s/1jIoKSuy 密码: m3uv
- 解决WordPress访问中文标签出现404的几个方法
最近很多主题用户提到安装完WordPress后中文标签出现404的情况,出现这种情况一般修改固定链接设置是没有效果的,多数是windows主机带来的麻烦.网上多数人说要修改核心文件class-wp.p ...
- 20189220 余超《Linux内核原理与分析》第二周作业
计算机如何工作的 一.存储程序计算机工作模型 冯诺依曼体系结构:核心思想为存储程序计算机.两个层面: (1)硬件的角度(计算机主板):一个CPU,一块内存,之间有总线连接.CPU内部有一个IP计算器, ...
- m4a 转MP3
import os for filename in os.listdir(r'.'): print filename os.rename(filename,filename.replace(' ',' ...
- JdkDynamicAopProxy与CglibAopProxy介绍
继续上一篇的介绍 1.上一篇分析到createAopProxy方法,创建Aop代理对象 protected final synchronized AopProxy createAopProxy() { ...
- Maven在jar中生成重复的pom.xml和pom.properties文件
eclispe maven打包的时候总是出现"生成的jar的META-INF中,重复的pom.xml和pom.properties文件.",maven命令直接打包则没有这个问题. ...
- Intellij idea 告警:'while' statement cannot complete without throwing an exception
有时候这个告警是多余的,例如我们手写的监控线程. 如果有消除告警强迫症.在线程的执行方法上加入注解. @SuppressWarnings("InfiniteLoopStatement&quo ...
- too many positional arguments错误
在window下mongodb默认安装在c盘的Program Files文件下 这个文件名中间有个空格 就导致了接下来too many positional arguments错误的产生