IDENT_CURRENT ,@@identity,SCOPE_IDENTITY() 之间对比
- IDENT_CURRENT 返回为某个会话和用域中的指定表生成的最新标识值。
- @@IDENTITY 返回为跨所有作用域的当前会话中的某个表生成的最新标识值。
- SCOPE_IDENTITY() 返回为当前会话和当前作用域中的某个表生成的最新标识值。
CREATE TABLE TestTB1
(ID INT IDENTITY(1,1) PRIMARY KEY,
DATA VARCHAR(50))
当会话没有插入数据的时候, @@IDENTITY 和 SCOPE_IDENTITY() 都是null,而 IDENT_CURRENT是1 这个是需要区别
SELECT @@identity AS '@@identity' ,
SCOPE_IDENTITY() AS 'SCOPE_IDENTITY()' ,
IDENT_CURRENT('TestTB1') AS 'IDENT_CURRENT()'



INSERT INTO TestTB1 (Data) SELECT 'A'
SELECT '会话1',@@IDENTITY AS '@@IDENTITY',IDENT_CURRENT('TestTB1') AS 'IDENT_CURRENT()'

INSERT INTO TestTB1 (Data) SELECT 'B'
SELECT '会话2',@@IDENTITY AS '@@IDENTITY',IDENT_CURRENT('TestTB1') AS 'IDENT_CURRENT()'
INSERT INTO TestTB1 (Data) SELECT 'C'
SELECT '会话1',@@IDENTITY AS '@@IDENTITY',IDENT_CURRENT('TestTB1') AS 'IDENT_CURRENT()'

会话2
SELECT * FROM dbo.TestTB1
SELECT '会话2',@@IDENTITY AS '@@IDENTITY',,IDENT_CURRENT('TestTB1') AS 'IDENT_CURRENT()'

TRUNCATE TABLE dbo.TestTB1
go CREATE PROCEDURE #TEST_PRO
AS
BEGIN
INSERT INTO TestTB1 (Data) SELECT 'A'
SELECT @@identity AS '@@identity' ,
SCOPE_IDENTITY() AS 'SCOPE_IDENTITY()' ,
IDENT_CURRENT('TestTB1') AS 'IDENT_CURRENT()'
END
go EXEC #TEST_PRO SELECT @@identity AS '@@identity' ,
SCOPE_IDENTITY() AS 'SCOPE_IDENTITY()' ,
IDENT_CURRENT('TestTB1') AS 'IDENT_CURRENT()'

那嵌套的情况会怎样呢?再嵌套一层看看,实验结果是跟上面是一致的,在嵌套情况下,作用域不同, SCOPE_IDENTITY() 会重新计数,如下
TRUNCATE TABLE dbo.TestTB1
go CREATE PROCEDURE #TEST_PRO_Inner
AS
BEGIN
INSERT INTO TestTB1 (Data) SELECT 'A'
SELECT 'TEST_PRO_Inner',
@@identity AS '@@identity' ,
SCOPE_IDENTITY() AS 'SCOPE_IDENTITY()' ,
IDENT_CURRENT('TestTB1') AS 'IDENT_CURRENT()'
END
go CREATE PROCEDURE #TEST_PRO
AS
BEGIN
EXEC #TEST_PRO_Inner
SELECT 'TEST_PRO',
@@identity AS '@@identity' ,
SCOPE_IDENTITY() AS 'SCOPE_IDENTITY()' ,
IDENT_CURRENT('TestTB1') AS 'IDENT_CURRENT()'
INSERT INTO TestTB1 (Data) SELECT 'B'
SELECT 'TEST_PRO_1',
@@identity AS '@@identity' ,
SCOPE_IDENTITY() AS 'SCOPE_IDENTITY()' ,
IDENT_CURRENT('TestTB1') AS 'IDENT_CURRENT()'
END
go EXEC #TEST_PRO
SELECT '外部',
@@identity AS '@@identity' ,
SCOPE_IDENTITY() AS 'SCOPE_IDENTITY()' ,
IDENT_CURRENT('TestTB1') AS 'IDENT_CURRENT()'

PS:第一次写blog,写得不好,请各位看官多包涵。多指导
IDENT_CURRENT ,@@identity,SCOPE_IDENTITY() 之间对比的更多相关文章
- [转]IDENT_CURRENT、SCOPE_IDENTITY、@@IDENTITY 差異對照表
本文转自:http://www.dotblogs.com.tw/hunterpo/archive/2009/09/04/10421.aspx IDENT_CURRENT.SCOPE_IDENTITY ...
- 糟糕的@@identity,SCOPE_IDENTITY ,IDENT_CURRENT
在某数据库里面,某甲用@@identity来获取最近插入的id值,当在多人环境,发生获取到null值的问题. 那么@@identity是否有存在的必要? 感觉像生个孩子,多了个指头. 有的数据库的ge ...
- 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 ...
- SCOPE_IDENTITY的作用
SCOPE_IDENTITY返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值.一个作用域就是一个模块——存储过程.触发器.函数或批处理.因此,如果两个语句处于同一个存储 ...
- Git使用六:版本对比
准备工作: 创建一个新的项目,并初始化git 创建两个文件,并写入对应内容(utf-8无bom格式) 执行git add 命令将两个文件添加到暂存区,执行commit命令提交到仓库并生产快照 修改工作 ...
- Keystone Federation Identity
转自 http://wsfdl.com/openstack/2016/01/14/Keystone-Federation-Identity.html Keystone federation ident ...
- sql server中常用方法函数
SQL SERVER常用函数 1.DATEADD在向指定日期加上一段时间的基础上,返回新的 datetime 值. (1)语法: DATEADD ( datepart , number, date ) ...
- 【转】SQL 2008 Insert返回自动编号id三种方法比较
SQL Server 2008中,insert数据的时候返回自动编号的id,有三种方法实现SCOPE_IDENTITY.IDENT_CURRENT 和 @@IDENTITY, 它们都返回插入到 IDE ...
随机推荐
- 程序员下一门要学的编程语言Swift
基于PHP是世界上最好的编程语言这个真理,我一直认为Hack才是程序员要学的下一门编程语言. 但今天看到InfoQ放出的新闻:"Google或许会将Swift编程语言纳入Android平台并 ...
- MurmurHash算法:高运算性能,低碰撞率的hash算法
MurmurHash算法:高运算性能,低碰撞率,由Austin Appleby创建于2008年,现已应用到Hadoop.libstdc++.nginx.libmemcached等开源系统.2011年A ...
- sublime Text-Theme
一.Spacegray主题 1>安装Spacegray主题按下Ctrl+Shift+P,输入install,选择Package Control: Install Package,然后输入Spac ...
- EasyUI-加载完Html内容样式渲染完成后显示
等待页面的css样式加载完毕,Html内容加载完毕,样式生成后再进行展示,避免一开始加载内容后,逐渐渲染样式造成的不良视觉效果,增强用户体验. 新增base-loading.js文件,代码如下 //获 ...
- 泛函编程(31)-泛函IO:Free Monad-Running free
在上节我们介绍了Free Monad的基本情况.可以说Free Monad又是一个以数据结构替换程序堆栈的实例.实际上Free Monad的功能绝对不止如此,以heap换stack必须成为Free M ...
- linux使用rpm重装jdk
1.卸载jdk #rpm -qa | grep gcj 如果输出没有内容,说明没有jdk,如果输出有内容,要把搜索到的文件卸载掉,命令为: #rpm -e --nodeps [上步操作输出的文件] 然 ...
- javascript(定时函数)
一setTimeout函数和setInterval函数的语法以及应用 1.setTimeout函数 定义和用法:setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式. 语法:setTi ...
- 静态代码审查工具FxCop插件开发(c#)
FxCop是一款微软官方提供的.net平台代码审查工具,目的是检查我们编写的程序集的代码是否符合规范.FxCop默认提供的是微软默认的审查规则,而且该规则符合<Framework DesignG ...
- [Android] WebView内的本地网页,使用XMLHttpRequest读取本地档案
[Android] WebView内的本地网页,使用XMLHttpRequest读取本地档案 问题情景 在Android里,可以使用WebView来呈现本地或是远程的网页内容.但是在显示本地网页时,如 ...
- 重新初始化 VS2010
开始->所有程序->Microsoft Visual Stdio 2005->Visual Stdio Tools->Visual Stdio 2005 命令提示 这时会弹出一 ...