10台客户端同时调用1个存储过程向某个表中插入数据并用@@IDENTITY返回ID,会引起混乱吗??每台客户端返回的ID,能保证是自己Insert数据的ID吗??关于@@IDENTITY,帮助中是这样定义的:
@@IDENTITY 和 SCOPE_IDENTITY 将返回在当前会话的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。何为"当前会话"?? 是指一个连接吗??
如果"当前会话"是指"当前连接"的话,我认为10台机器返回的ID不会混乱,
因为10台机器是不同的会话.不知道上述观点是否正确,望各位老师指点.

解决方案 »

  1.   

    主要是用触发器产生的
    当前会话--对表操作对象
    如:
    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
      

  2.   

    把触发器改一下就可以看到效果了
    create trigger test_tr on A
    for insert
    as
    insert B select * from B
    select @@IDENTITY as 'IDENTITY',SCOPE_IDENTITY as 'SCOPE_IDENTITY'