在SQL Server中如何获得刚插入一条新记录的自动ID号 收藏
---------------------------------------------------------------
使用[IDENT_CURRENT]
用法:SELECT IDENT_CURRENT('TABLENAME')
---------------------------------------------------------------
SELECT IDENT_CURRENT('TableName') --返回当前的最后自动编号
SELECT IDENT_INCR('TableName')--返回增量值
SELECT IDENT_SEED('TableName')--返回种子值

返回下一个自动编号:
SELECT IDENT_CURRENT('TableName') + (SELECT IDENT_INCR('TableName'))

--创建数据库和表
create database MyDataBase
use MyDataBase

create table mytable
(
id int identity(1,1),
name varchar(20)
)

--执行这个SQL,就能查出来刚插入记录对应的自增列的值
insert into mytable values('李四')
select @@identity

SQL Server 2000中,有三个比较类似的功能:他们分别是:SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY,它们都返回插入到 IDENTITY 列中的值。

IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。
@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值

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

例如,有两个表 T1 和 T2,在 T1 上定义了一个 INSERT 触发器。当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。此例说明了两个作用域:一个是在 T1 上的插入,另一个是作为触发器的结果在 T2 上的插入。

假设 T1 和 T2 都有 IDENTITY 列,@@IDENTITY 和 SCOPE_IDENTITY 将在 T1 上的 INSERT 语句的最后返回不同的值。

@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值,该值是插入 T2 中的值。

SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,该值是发生在相同作用域中的最后一个 INSERT。如果在作用域中发生插入语句到标识列之前唤醒调用 SCOPE_IDENTITY() 函数,则该函数将返回 NULL 值。

而IDENT_CURRENT('T1') 和 IDENT_CURRENT('T2') 返回的值分别是这两个表最后自增的值。

ajqc的实验:(40条本地线程,40+40条远程线程同时并发测试,插入1200W行),得出的结论是:
1.在典型的级联应用中.不能用@@IDENTITY,在CII850,256M SD的机器上1W多行时就会并发冲突.在P42.8C,512M DDR上,才6000多行时就并发冲突.
2.SCOPE_IDENTITY()是绝对可靠的,可以用在存储过程中,连触发器也不用建,没并发冲突

SELECT IDENT_CURRENT('TableName') --返回指定表中生成的最后一个标示值
SELECT IDENT_INCR('TableName')--返回指定表的标示字段增量值
SELECT IDENT_SEED('TableName')--返回指定表的标示字段种子值

返回最后插入记录的自动编号
SELECT IDENT_CURRENT('TableName')
返回下一个自动编号:
SELECT IDENT_CURRENT('TableName') + (SELECT IDENT_INCR('TableName'))

SELECT @@IDENTITY --返回当前会话所有表中生成的最后一个标示值

本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/archive/2010/04/15/1712951.html,如需转载请自行联系原作者

在SQL Server中如何获得刚插入一条新记录的自动ID号相关推荐

  1. SQL Server数据库中、获得刚插入新记录的自动ID号

    以下的文章主要是介绍在SQL Server数据库中正确获得刚插入一条新记录的自动ID号的实际操作过程,下面就是文章对其的主要内容的具体描述,望大家在浏览之后会对其有更深的了解. 使用[IDENT_CU ...

  2. SQL Server中如何取得刚插入的标识值

    数据库实际应用中,我们往往需要得到刚刚插入 的标志值来往相关表中写入数据.但我们平常得到的真的是我们需要的那个值么? 有时我们会使用 SELECT @@Identity 来获得我们刚刚插入的值,比如下 ...

  3. cte公用表表达式_在SQL Server中使用CTE进行插入和更新(公用表表达式)

    cte公用表表达式 In CTEs in SQL Server; Querying Common Table Expressions the first article of this series, ...

  4. SQL Server中的top(最前面的若干记录)

    零.码仙励志 在强者的眼中,没有最好,只有更好 一.建库和建表 create database scort use scort create table emp (empno int primary ...

  5. SQL Server中的事务与锁

    了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁: ...

  6. cte公用表表达式_CTE SQL删除; 在SQL Server中删除具有公用表表达式的数据时的注意事项

    cte公用表表达式 In this article, the latest in our series on Common table expressions, we'll review CTE SQ ...

  7. SQL Server中的表变量

    In this article, we will explore the table variable in SQL Server with various examples and we will ...

  8. sql ddl中key_SQL DDL:SQL Server中SQL DDL命令入门

    sql ddl中key This article explains SQL DDL commands in Microsoft SQL Server using a few simple exampl ...

  9. oracle和sql server中,取前10条数据语法的区别

    在sql server中,取数据中前10条语句,我们可以用top 10 这样语句,但是oracle就没有这个函数,接下来介绍它们之间的区别 1.sql server 取前10语句和随机10条的语法 - ...

最新文章

  1. 用通配符解决mappingResources的繁琐配置
  2. 低开销、简单的网站监控工具Checkless开发者专访
  3. 关于jQuery.click()函数
  4. 支撑阻力指标_使用k表示聚类以创建支撑和阻力
  5. 总结下用Vue.js和webpack遇到的问题
  6. EL表达式, JSTL, 获取map集合中key的value
  7. 【自己给自己题目做】:如何在Canvas上实现魔方效果
  8. 自定义控件--实现步骤
  9. LeetCode 1120. 子树的最大平均值(DFS自底向上)
  10. C++ 移动和获取文件读写指针
  11. java 由接口构造对象_Java学习笔记04——类和对象|抽象和接口|构造方法与继承...
  12. 稀疏编码(sparse code)与字典学习(dictionary learning)
  13. Unity用GUI绘制Debug/print窗口/控制台-打包后测试
  14. .net winform 里控件的Dock属性(Dock的Z 顺序停靠)
  15. FBX格式和obj格式的区别
  16. CP2102 USB转串口驱动下载
  17. 阿里云EMAS 移动推送发布uni-app插件
  18. Android动画总结
  19. 甲骨文裁员真的与川普有关吗?
  20. 最简单的深拷贝_飘云羽逸_新浪博客

热门文章

  1. elasticsearch 集群在线水平扩容收缩
  2. 学vc,加油站(一)区域渐变
  3. 网络工程师考试部分技术要点
  4. Exchange 2016 Outlook新建会议时收到提醒邮件
  5. 2018-2019-1 20165325 20165320 20165337 实验二 固件程序设计
  6. 划分vlan,制作trunk口。使同一vlan能互相通讯
  7. ajax 跨域请求,每次会发送两个请求?
  8. 转巧用notepad++ 批量转换ansi 和 utf8
  9. 异常处理汇总-后端系列
  10. Java中实现cd命令:运行中更改当前工作目录