日期:2014-05-19  浏览次数:20472 次

10台客户端同时调用1个存储过程向某个表中插入数据并用@@IDENTITY返回ID,会引起混乱吗??
10台客户端同时调用1个存储过程向某个表中插入数据并用@@IDENTITY返回ID,会引起混乱吗??

每台客户端返回的ID,能保证是自己Insert数据的ID吗??

关于@@IDENTITY,帮助中是这样定义的:
@@IDENTITY   和   SCOPE_IDENTITY   将返回在当前会话的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY   只在当前作用域内返回值,而   @@IDENTITY   不限于特定的作用域。

何为 "当前会话 "??   是指一个连接吗??
如果 "当前会话 "是指 "当前连接 "的话,我认为10台机器返回的ID不会混乱,
因为10台机器是不同的会话.

不知道上述观点是否正确,望各位老师指点.

------解决方案--------------------
你的理解是对的
------解决方案--------------------
主要是用触发器产生的
当前会话--对表操作对象
如:
A表
create table A(id int identity(1,1),name)
create talbe B(id int identity(100,1),name)

create trigger test_tr on A
for insert
as
insert B select * from B
A为当前会话对象
@@IDENTITY--返回的是A表唯一标识
SCOPE_IDENTITY--返回的是B表的唯一标识
如增加1条记录
@@IDENTITY=1
SCOPE_IDENTITY=100