RT
如何实现?

解决方案 »

  1.   

    独占锁:只允许进行锁定操作的程序使用,其他任何对他的操作均不会被接受。执行数据更新命令时,SQL Server会自动使用独占锁。当对象上有其他锁存在时,无法对其加独占锁。 
      

  2.   

    看你的存储过程干嘛的了,我也是原来用过一次 忘记了。
    http://hi.baidu.com/bb3852/blog/item/da7a0eceba7b810593457e77.html
    这个里面看看吧!
      

  3.   

    给你个简单的,哈哈,进入SQL的时候插入一张表里面存一个1,然后执行完毕时候给他改为0、select * from 记录 where IsEdit=1
    IF @@ROWCOUNT = 0
    begin
       Update 记录 set IsEdit=1
       处理SQL
    ---处理完毕的时候
       Update 记录 set IsEdit=0
       select '可以进行使用……'
    end
    else
    begin
       select '正在使用中……'
    end
      

  4.   

    --连接1
    use pubs
    create proc test
    as 
    begin tran
    select * from authors with(paglock,xlock) where au_id='427-17-2319'
    waitfor delay '00:00:05'
    commit tranexec test
    drop proc test--另一连接执行
    exec test --只有连接1执行完了,才会执行
      

  5.   

    区别在于: 资源是否不被其它进程使用 和存储过程是否能被调用(比如一个无exec权限的用户).
    这是本质上的。
      

  6.   

    Application Lock.BOL: sp_getapplock,sp_releaseapplock
      

  7.   

    有点类似线程同步, 你可以这样模拟实现
    搞一个表, 比如tb1(proc_name varchar(50), status int)用来存储要锁定的存储过程的状态.
    存储过程的设计如下
    Create PROCEDURE PROC_001
    AS
    --检查存储过程是否在运行中
    declare @is_running int = 0;
    select @is_running=status from tb1 where proc_name='PROC_001';if @is_running is null
    begin
        insert into tb1 values('PROC_001',0);
        set @is_running = 0 ; 
    endif @is_running=0 --0表示没有其他的应用调用该存储过程
    begin
    --将标识置为1,模拟加锁
    exec('update tb1 set status=1 where proc_name=''PROC_001''');

    /*

    要运行的处理代码

    */


    --处理完毕, 解锁
    exec('update tb1 set status=0 where proc_name=''PROC_001''');
    endGO
    每天回帖有10个可用分^_^