SQL server插入数据后,获取自增长字段的值

Posted Avatarx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL server插入数据后,获取自增长字段的值相关的知识,希望对你有一定的参考价值。

 

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
insert into Tb_People(uname,era,amount) values( \'兆周\',\'老年\',\'10000\')
  select @@identity
  --当运行完插入语句后,执行select   @@identity就可得到自动生成的id
  --如果是sql server 最好用select SCOPE_IDENTITY() as id
--因为@@identity全局的
select SCOPE_IDENTITY() as id
select IDENT_CURRENT (\'Tb_People\')
select MAX(id) from Tb_People
 
--SCOPE_IDENTITY
--返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。
--IDENT_CURRENT
--返回为任何会话和任何作用域中的指定表最后生成的标识值。这个函数需要一个以表名为值的变量,也就是说虽然不受会话和作用域的限制,却会受到表的限制。
--@@IDENTITY
--返回最后插入的标识值。
--体会:加上事务处理,两个函数一个变量没有本质区别。不加事务处理两个函数一个变量受到其他会话、作用域的影响不一样。
--一直以来都是使用@@identity来获得最后一个插入到表的记录的identity值,最近发现这种方法在某种情况是不可靠的,先来看看两个概念
--作用域:在SQL SERVER作用域就是一个模块-存储过程,触发器,函数或批处理
--会话: 一个用户连接产生的所有上下文信息
 
--相同点:都是返回最后插入的标识值
--不同点:
--@@identity:返回当前会话最后一个标识值,不限于特定的作用域;
--ident_current(\'tablename\'):返回任何会话,任何作用域中的指定表中生成的最后一个标识值;
--scope_identity:返回当前会话当前作用域任何表生成的最后一个标识值 。

以上是关于SQL server插入数据后,获取自增长字段的值的主要内容,如果未能解决你的问题,请参考以下文章

SQL如何插入自增长的主键值(如图)。谢谢

SQL Server 2000中如何设置自增主键?

Mysql 中获取刚插入的自增长id的值

sql server中如何实现自增字段?

SQLIte如何设置自动增长的字段?

当插入数据失败时,防止mysql自增长字段的自增长的方法