获取sql server中自增量之scope_identity(),@@Identity,IDENT_CURRENT的区别
http://www.lmwlove.com/ac/ID480
在sql server2005,如果要获某个表最新增加的自增量,我们都知道,可以使用COPE_IDENTITY、
IDENT_CURRENT 和 @@IDENTITY三个函数,因为它们都返回插入到标识列中的值。但这三个函数是不是不管什么时候,返回的值都一样的呢?答案是错的,本人以前正是因为没有理解到这三个函数的区别,所以取到了错误的自增量。
首先我们来看一下三个函数的定义:
@@IDENTITY:返回为跨所有作用域的当前会话中的某个表生成的最新标识值。
SCOPE_IDENTITY:返回为当前会话和当前作用域中的某个表生成的最新标识值。
IDENT_CURRENT:返回为某个会话和用域中的指定表生成的最新标识值。
在详解之前,我们先了解什么是会话与作用域:
sql会话:用户利用sql命令或使用查询分析器连接到数据库时,一个新的会话就建立了,一直到该连接断开,或者用户重置该连接为止,都处于同一个会话中。
作用域:如果多个语句处在同一个存储过程,函数,批处理中,那么它们位于相同的作用域中。
了解会话与作用域后,相信读者对以上三个函数都有了大概的理解了。我们再举个例子来说明。
假设有表T1与T2,T1与T2表都包含自增列ID。我们在T1表中使用insert触发器往T2中添加数据。
现在我们往T1表添加新数据,假设T1表新的ID值为1000,T1表的触发器往T2表添加数据T2表产生的新ID值
为2000,
那么执行完插入语句后马上执行
select SCOPE_IDENTITY()
select IDENT_CURRENT('T1')
select IDENT_CURRENT('T2')
返回值应为:
2000
1000
1000
2000
延伸提醒:我们在写插入语句时总喜欢返回最新的ID值,Sql一般是这样写的
select @@IDENTITY
比如动软自动生成的代码就是如此,
其实@@IDENTITY是不保险的,SCOPE_IDENTITY()才是最保险的
附上另两个与自量列有关的函数:
1、获取标识列的种子值
可使用函数IDENT_SEED,用法:
SELECT IDENT_SEED ('表名')
2、获取标识列的递增量
可使用函数IDENT_INCR ,用法:
SELECT IDENT_INCR('表名')
获取sql server中自增量之scope_identity(),@@Identity,IDENT_CURRENT的区别的更多相关文章
- C# 如何获取SQL Server 中指定数据表的所有字段名和字段类型
如何获取指定数据表的所有字段名和字段类型.SqlConnection.GetSchema方法有2个重载形式,获取指定数据表的所有字段名和字段类型的秘密就在GetSchema (String, Stri ...
- 获取SQL Server中连接的客户端IP地址[转]
有时候需要获取连接到SQL Server服务器上的客户端IP地址,用什么办法呢? SELECT *FROM sys.dm_exec_connections WHERE session_id = @@S ...
- 获取SQL server 中的表和说明
SELECT 表名 = case when a.colorder = 1 then d.name else '' end, 表说明 = case w ...
- sql server中的用户临时表和全局临时表的区别
临时表分为: 本地临时表,仅限于当前访问者访问,创建方法去如下:create table #TableName(表结构)储存于数据库tempdb内(硬盘),当前用户断开连接(把当前的),自动删除如果使 ...
- 在SQL SERVER中获取表中的第二条数据
在SQL SERVER中获取表中的第二条数据, 思路:先根据时间逆排序取出前2条数据作为一个临时表,再按顺时排序在临时表中取出第一条数据 sql语句如下: select top 1 * from(se ...
- SQL Server中是否可以准确获取最后一次索引重建的时间?
在SQL Server中,我们能否找到索引的创建时间?最后一次索引重建(Index Rebuild)的时间? 最后一次索引重组(INDEX REORGANIZE)的时间呢? 答案是我们无法准确的找到 ...
- (4.17)sql server中的uuid获取与使用
sql server中的uuid 建表: 1.自增长 studentno int primary key identity(1,1)——bigint也是可以的 2.创建uuidcustomerid ...
- SQL SERVER 中如何获取日期(一个月的最后一日、一年的第一日等等)
https://blog.csdn.net/deepwishly/article/details/9101307 这是计算一个月第一天的SQL 脚本: SELECT DATEADD(mm, DAT ...
- SQL Server中关于跟踪(Trace)那点事
前言 一提到跟踪俩字,很多人想到警匪片中的场景,同样在我们的SQL Server数据库中“跟踪”也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充足的证据来破案. 简 ...
随机推荐
- BZOJ 1015 并查集&连通块
很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧道互相直接或 ...
- 使用curl出现,curl: /usr/local/lib/libssl.so.1.1: version `OPENSSL_1_1_1' not found (required by /usr/lib/x86_64-linux-gnu/libcurl.so.4)
主要原因是curl找不到openssl的路径,所以只要将openssl的路径添加到相应的变量中就可以了. 参考连接https://blog.csdn.net/RookieWutongshu/artic ...
- 图片框住一个小视频 谈css padding百分比自适应
今天市场提出活动页,活动页有一块内容是在一个手机背景图框里播放视频,网页是适配的,设计师只给我一张带有手机壳的背景图. 如果用JS画应该也是可以的,但一个简单的活动页没必要,快速实现用背景图调CSS最 ...
- ssh远程连接centos7故障排除
导致故障的原因在两个方面 1.网络问题---物理链路就不通可以通过在客户端 telnet目标主机地址,例如:telnet 192.168.1.107 22 千万别忘了端口号!!!,如果通了还连不上则按 ...
- python--UUID唯一标识符
UUID: 通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的唯一性. 它是通过MAC地址, 时间戳, 命名空间, 随机 ...
- Codeforces Round #451 (Div. 2) [ D. Alarm Clock ] [ E. Squares and not squares ] [ F. Restoring the Expression ]
PROBLEM D. Alarm Clock 题 OvO http://codeforces.com/contest/898/problem/D codeforces 898d 解 从前往后枚举,放进 ...
- 【Winfrom-Button】 重写Button,去掉获取焦点时的边框
Winfrom Button 去掉获取焦点时的边框: 自定义一个Button,重写ShowFocusCues方法 /// <summary> /// 去掉获取焦点的边框 /// </ ...
- nodejs(上)(获取请求参数)
Node.js是一个让JavaScript运行在服务器端的开发平台 参考文章 nodejs特点: 单线程 异步非阻塞i/o(异步相对节省资源,把那个等待的时间利用上了) 事件驱动 稳定性差(因为 ...
- poj 3641 Pseudoprime numbers 快速幂+素数判定 模板题
Pseudoprime numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7954 Accepted: 3305 D ...
- 4-EM算法原理及利用EM求解GMM参数过程
1.极大似然估计 原理:假设在一个罐子中放着许多白球和黑球,并假定已经知道两种球的数目之比为1:3但是不知道那种颜色的球多.如果用放回抽样方法从罐中取5个球,观察结果为:黑.白.黑.黑.黑,估计取到黑 ...