日期:2014-05-17  浏览次数:20561 次

插入语句时要求得到标识值的问题
sql2008r2  一个表中有个自动+1的标识字段
现在向这个表插入一个记录,如何确定刚刚插入的这个记录的标识值?

我在网上查了一下,基本都是用 @@IDENTITY 来解决

所以我又查了一下@@IDENTITY的说明, <可以返回当前会话中的所有表中生成的最后一个标识值>

搞不明白的就是"最后"这两个字的意思

如果多人同时使用数据库,并且有人和我同时执行插入语句,别人执行完毕比我晚那么一点点 @@IDENTITY 是否能100%确定返回的值就是我刚刚执行的插入语句所得到的标识值,而不是网络上别人插入时所得到的?
------解决方案--------------------
不一定非要用这个,而且有时候还不能用这个,就比如你那个并发的情况下,可以看看这里:http://blog.csdn.net/dba_huangzj/article/details/7685162
------解决方案--------------------

create table tb
(
id int identity(1,1),
name varchar(255)
)
insert into tb (name)
select 'test'  union all
select 'test'
select @@IDENTITY
/*
2
*/

--左后指的是你插入的数据  例如我上面那样  插入了两条  那么返回的是2   就是第二条数据(也是最后一条数据)的标志列值

------解决方案--------------------
<可以返回当前会话中的所有表中生成的最后一个标识值>

别人和你同时执行,但是别人和你使用的是两个不同的会话!