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