好像LOCK不行,可以通过安全权限限制上想办法。。

解决方案 »

  1.   

    SQL只能对UPDATE进行锁定,若想在一个处理过程中进行锁定只有从程序中想些办法。
      

  2.   

    你可以用表提示来试试:
    SELECT au_lname FROM authors WITH (ROWLOCK)
      

  3.   

    设想同一记录被两台工作站读去,两个用户分别修改了同一字段的数据.
    那么数据库中的这条记录的字段的最终值应当是最后提交的用户所修
    改的值. 而这样,可能会产 生错误! 对银行这样的系统,问题可就大了.SQL Server难道对这种常见的问题没有提供解决方案吗?
      

  4.   

    SQL SERVER 有悲观锁,不可能2个USE同时修改,如果一个修改,另一个就无法读取。
    SELECT * FROM TABLENAME WITH (ROWLOCK)
      

  5.   

    我们写程序常见的修改方法是:读取某条记录,显示在界面上,然后等待用户输入新值,输入完毕后,按下保存按钮,保存数据(即将数据提交到SQL Server)如Leimin(leimin)和icevi(按钮工厂)所说的方法,用悲观锁,
    但还是不能限制两个用户读同一条记录.也就是说,无法避免在两个用户的界面上
    显示同一条记录! 其中一个用户修改这条记录,而另一个用户无法知道其它人也在修改数据.当第一个用户提交后,另一个用户的界面上仍然是原来数据,他也可能修改,并提交,所以悲观锁也无法避免这种问题啊!
      

  6.   

    : wt_sanlian(雷电) 我不知你用什么开发软件做前台,在pb中若出现你所讲的这种情况的话,在提交事物的时候,pb会提示你数据已经被修改了,并且事务回滚,提示刷新的。
      

  7.   

    mornwoo(疾风之虫): 建修改标志,当一个用户置位这个标识后,突然断电了,那么这个标志就不能复位,其它的程序就不能再修改了!看来PB的功能还是比较的强的啊,可我用的是C++ Builder,好象没有这个功能.
    这个解决方案还是挺好的啊,谢谢!
      

  8.   

    取出的值设为A
    当INSERT或UPDATE的时候,做INSERT(UPDATE)…… WHERE EXISTS (SELECT * FROM tablename WHERE 值='A')这样应该就可以了!
      

  9.   

    在SQL 查询器中试过了,
    用WITH ROWLOCK无法锁定,
    select a,b,c,d,e from tableA With (ROWLOCK)
    ,,
    在另一个查义器中
    update tableA set a="1"
    一样可以成功!!!
      

  10.   

    提供PB的实现原理给你,其实也很简单,
    也就是产生UPDATE时的WHERE子句,
    WHERE CLASS
    KEY AND UPDATE COLUMN
    要使你这种方法以实现,就是产生WHERE +UPDATE_COL=原值
    and KEYID=?,,
    这样做,
    当都查询出来后,
    A先修改了,B再修改时提交就会不能更新了!因为可更新列的原值被改变了,
    产生的WHERE子句就不能成功更新原数据了!
      

  11.   

    xjbs(大鱼) :不是这样试法的,要用事务处理,单独一句SELECT,早执行完了,有锁也早就释放了。等你去UPDATE时早就没有锁定了。
    你用:
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
    GO
    begin tran
    select * from tablea with (rowlock)
    .......
    ......
    commit tran
    在未提交事务前,肯定用update tableA set a="1"是不会成功的。你再试。