现在用Sqlserver和Delphi开发了一个应用程序,有多个客户端直接连接数据库。  当多个用户同时录入数据的时候,要求各个客户端能够互斥。  不知道存储过程怎么写,sqlserver 有什么机制可以实现这个功能。
 

解决方案 »

  1.   


    互斥, 比如一个人录入单据, 另一个在进行结算处理。 显然两个工作不能同时进行的。并且不能有两个客户端在同时进行结算处理,这些怎么在Sqlserver上进行处理呢?另外,插入记录的时候, 现在使用 SCOPE_IDENTITY() 在存储过程中返回ID值的,不知道多个客户端调用会不会引起混乱。
      

  2.   

    1、这种互斥必须用锁来控制,三言两语具体用法说不清楚,自己查查资料
    2、插入记录的时候, 现在使用 SCOPE_IDENTITY() 在存储过程中返回ID值的做法没有问题,SCOPE_IDENTITY()返回本连接本表的最后ID。
      

  3.   


    看楼主这样说,关于这个表的处理的SQL语句貌似都要加表级锁了对于SCOPE_IDENTITY(),作用域是当前会话,不用担心你说的那种问题。
      

  4.   

    看有人这么做的,不太明白加了一个互斥表(proc, flag)在存储过程前加一句话
    update S_ProcList with(updlock) set [flag]=1 where ProcName = 'sp_OrderItem'不知道这句话有什么用途
      

  5.   

    update S_ProcListupdate S_ProcList with(updlock) set [flag]=1 where ProcName = 'sp_OrderItem'更新存贮过程列表 设置标志[flag]=1 ,当存贮过程名称是'sp_OrderItem',
    更新时加with(updlock),即读取表时加更新锁(写锁),而不是加共享锁(读锁)