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的分析的更多相关文章

  1. 糟糕的@@identity,SCOPE_IDENTITY ,IDENT_CURRENT

    在某数据库里面,某甲用@@identity来获取最近插入的id值,当在多人环境,发生获取到null值的问题. 那么@@identity是否有存在的必要? 感觉像生个孩子,多了个指头. 有的数据库的ge ...

  2. IDENT_CURRENT ,@@identity,SCOPE_IDENTITY() 之间对比

    获取表的标识值,有3种比较常见的用法 IDENT_CURRENT ,@@identity,SCOPE_IDENTITY(),有啥不一样呢? 3个关键字在联机手册中的解释   IDENT_CURRENT ...

  3. [MSSQL]SCOPE_IDENTITY,IDENT_CURRENT以及@@IDENTITY的区别

    简单解释下SCOPE_IDENTITY函数,IDENT_CURRENT函数以及@@IDENTITY全局变量的区别 SCOPE_IDENTITY函数返回当前作用域内,返回最后一次插入数据表的标识,意思是 ...

  4. @@identity, scope_identity ident_current 的区别

  5. SQL SERVER-identity | @@identity | scope_identity

    主键自增 IDENTITY(1,1),MS SQL Server 使用 IDENTITY 关键字来执行 auto-increment 任务. 在上面的实例中,IDENTITY 的开始值是 1,每条新记 ...

  6. SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY

    SCOPE_IDENTITY.IDENT_CURRENT 和 @@IDENTITY SQL Server 2000中,有三个比较类似的功能:他们分别是:SCOPE_IDENTITY.IDENT_CUR ...

  7. @@identity、scope_identity()、IDENT_CURRENT('tablename')函数的区别

    @@IDENTITY 和SCOPE_IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值.但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值:@@IDENTITY 不受限于 ...

  8. 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 ...

  9. ASP.NET Core Identity Hands On(2)——注册、登录、Claim

    上一篇文章(ASP.NET Core Identity Hands On(1)--Identity 初次体验)中,我们初识了Identity,并且详细分析了AspNetUsers用户存储表,这篇我们将 ...

随机推荐

  1. 初始CSS3小知识【99%人不知道的小技巧】

    一.引入样式    1.行内样式表   <h1 style="color: red;font-size: 18px;">10-30</h1>     2.内 ...

  2. nginx中的upstream使用

    upstream的基本使用 upstream admin{server 127.0.0.1:9090 down;server 127.0.0.1:8080 weight=2;server 127.0. ...

  3. udf也能用Python

    具体步骤见<fluent加载第三方(C++,Fortran等)动态链接库> 我们对导入的动态链接库进行改动 打开VS2013 完成了上述过程以后,还需要配置Python 首先需要安装Pyt ...

  4. Unity接入微信登录 微信分享 微信支付 支付宝SDK

    你将会学到的unity集成SDK游戏中接入微信支付与支付宝支付游戏中接入微信登录与微信分享 目录 mp4格式,大小2.2GB 扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop13 ...

  5. 在本地搭建hyperledger fabric 网络

    参考了官方文档,直接就可以了https://hyperledger-fabric.readthedocs.io/en/latest/build_network.html 很好用 ➜ ~ cd $GOP ...

  6. Sharding-JDBC 按日期时间分库分表

    简介 Sharding-JDBC 定位为轻量级Java框架,在Java的JDBC层提供的额外服务. 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完 ...

  7. 企业架构 Red Hat Drools KIE Project 三大核心产品

    美团放弃Drools自研规则引擎: https://blog.csdn.net/qq_18603599/article/details/80767912 Drools rule engine虽然好,但 ...

  8. 使用Nginx转发tcp请求

    要求nginx版本大于1.9,在nginx.conf添加以下,要求和http{}同级 stream { upstream cakehouse { server weight= max_fails= f ...

  9. 使用GridSearchCV进行网格搜索微调模型

    import numpy as np import pandas as pd from sklearn.feature_extraction.text import TfidfVectorizer f ...

  10. unittest中的TestLoader使用

    一:unittest中的TestLoader使用说明 第一步:unittest增加TestSuit() suite=unittest.TestSuite() 第二步:unittest增加Testloa ...