在SQL Server中如何获得刚插入一条新记录的自动ID号
在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号相关推荐
- SQL Server数据库中、获得刚插入新记录的自动ID号
以下的文章主要是介绍在SQL Server数据库中正确获得刚插入一条新记录的自动ID号的实际操作过程,下面就是文章对其的主要内容的具体描述,望大家在浏览之后会对其有更深的了解. 使用[IDENT_CU ...
- SQL Server中如何取得刚插入的标识值
数据库实际应用中,我们往往需要得到刚刚插入 的标志值来往相关表中写入数据.但我们平常得到的真的是我们需要的那个值么? 有时我们会使用 SELECT @@Identity 来获得我们刚刚插入的值,比如下 ...
- cte公用表表达式_在SQL Server中使用CTE进行插入和更新(公用表表达式)
cte公用表表达式 In CTEs in SQL Server; Querying Common Table Expressions the first article of this series, ...
- SQL Server中的top(最前面的若干记录)
零.码仙励志 在强者的眼中,没有最好,只有更好 一.建库和建表 create database scort use scort create table emp (empno int primary ...
- SQL Server中的事务与锁
了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁: ...
- cte公用表表达式_CTE SQL删除; 在SQL Server中删除具有公用表表达式的数据时的注意事项
cte公用表表达式 In this article, the latest in our series on Common table expressions, we'll review CTE SQ ...
- SQL Server中的表变量
In this article, we will explore the table variable in SQL Server with various examples and we will ...
- 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 ...
- oracle和sql server中,取前10条数据语法的区别
在sql server中,取数据中前10条语句,我们可以用top 10 这样语句,但是oracle就没有这个函数,接下来介绍它们之间的区别 1.sql server 取前10语句和随机10条的语法 - ...
最新文章
- 用通配符解决mappingResources的繁琐配置
- 低开销、简单的网站监控工具Checkless开发者专访
- 关于jQuery.click()函数
- 支撑阻力指标_使用k表示聚类以创建支撑和阻力
- 总结下用Vue.js和webpack遇到的问题
- EL表达式, JSTL, 获取map集合中key的value
- 【自己给自己题目做】:如何在Canvas上实现魔方效果
- 自定义控件--实现步骤
- LeetCode 1120. 子树的最大平均值(DFS自底向上)
- C++ 移动和获取文件读写指针
- java 由接口构造对象_Java学习笔记04——类和对象|抽象和接口|构造方法与继承...
- 稀疏编码(sparse code)与字典学习(dictionary learning)
- Unity用GUI绘制Debug/print窗口/控制台-打包后测试
- .net winform 里控件的Dock属性(Dock的Z 顺序停靠)
- FBX格式和obj格式的区别
- CP2102 USB转串口驱动下载
- 阿里云EMAS 移动推送发布uni-app插件
- Android动画总结
- 甲骨文裁员真的与川普有关吗?
- 最简单的深拷贝_飘云羽逸_新浪博客