获取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数据库中“跟踪”也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充足的证据来破案. 简 ...
随机推荐
- Invalid character found in the request target. The valid characters are defined in RFC 7230 and RF
SpringBoot 请求参数包含 [] 特殊符号 返回400状态 //springBoot 启动类 添加 bean @Bean public TomcatServletWebServerFactor ...
- CSS——字体大小最常用的单位
px (像素): 将像素的值赋予给你的文本.这是一个绝对单位, 它导致了在任何情况下,页面上的文本所计算出来的像素值都是一样的. ems: 1em 等于我们设计的当前元素的父元素上设置的字体大小 (更 ...
- 洛谷P3690 Link Cut Tree (动态树)
干脆整个LCT模板吧. 缺个链上修改和子树操作,链上修改的话join(u,v)然后把v splay到树根再打个标记就好. 至于子树操作...以后有空的话再学(咕咕咕警告) #include<bi ...
- Linux下mount存储盘遇到的错误
一.注意点 1.超过1T的盘,创建的分区要查看是否初始化为了GPT格式. 2.如果新添加的盘是从存储上挂载的,涉及到多路径的问题,挂载的是多路径的盘符,比如:/dev/mapper/mpatha(对应 ...
- [Functional Programming] Add, Mult, Pow, isZero
const log = console.log; // zero :: &fa.a const zero = f => x => x; // zero is F // once : ...
- xcode打正式包提示缺少icon图标解决方法
报如下错,是说缺少ipad图标 解决方法 如下图创建图标库 打开新建的图标库文件夹中的contents.josn文件,把下面的代码复制到原来的图标库(可以不进行上一步建图标库,手动添加也可以) 然后把 ...
- query mousedown()方法 语法
query mousedown()方法 语法 作用:当鼠标指针移动到元素上方,并按下鼠标按键时,会发生 mousedown 事件.与 click 事件不同,mousedown 事件仅需要按键被按下,而 ...
- Flash上传超大文件解决方案
文件夹数据库处理逻辑 public class DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject() ...
- Java进阶知识03 Hibernate的基础配置详解
1.Hibernate的原理/流程步骤 1.通过Configuration().configure(); 读取并解析hibernate.cfg.xml配置文件,并创建一个configuration对象 ...
- 51 Nod 1352 集合计数
大致题意:求ax+by=n+1的正数解的个数. 先看下面: 相信看过了通解的参数表示后已经知道怎么解了,贴代码: #include <bits/stdc++.h> #define ll l ...