我是ASP.NET的 我的ORM查询类他没有对表进行加锁的功能,
然后我现在要对他添加一个加锁的功能,但为了不对他改动太多
麻烦大家帮我看看下面的两个语句,实现的效果有什么区别谢谢
1:
开始事务
SELECT TOP 0 FROM MyTab WITH(TABLOCKX)
SELECT * FROM MyTab
....2:
开始事务
SELECT * FROM {0} WITH(TABLOCKX)
....

解决方案 »

  1.   

    with (tablockx)就锁了,其他语句就操作不了了,这样写肯定不行
      

  2.   

    我要的就是要锁死这个表
    但是我不能写语句
    SELECT * FROM MyTab WITH(TABLOCKX) 
    所以问这里
    SELECT TOP 0 FROM MyTab WITH(TABLOCKX) 
    SELECT * FROM MyTab 
    能否实现和他一样的功能谢谢
      

  3.   

    要锁死这个表 ,是不是不想让他对表进行任何的修改?只能让他查询还是?
    你使用TABLOCKX即 使用表的排它锁。该锁可以防止其它事务读取或更新表,并在语句或事务结束前一直持有。
    这样的话,就不能加共享锁了。另外你这个select执行完毕后,也就是这个隐形的事务结束了,锁也就释放了吧。现在要对他添加一个加锁的功能,但为了不对他改动太多 
    这个改动指的是什么?
      

  4.   

    我的过程是这样的
    1:
    事务开始
    SELECT * FROM MyTab WITH(TABLOCKX) 
    ... 这里还有很多操作,
    结束事务那上面的代码可不可以改为事务开始
    SELECT Top 0 FROM MyTab WITH(TABLOCKX) 
    SELECT * FROM MyTab 
    ... 这里还有很多操作,
    结束事务
      

  5.   

    TABLOCKX是表的排它锁,也就是加了这个锁以后就不能再加其他的锁了。
    而查询的时候一般是加共享锁的,那么共享锁就加不上了,其他语句就操作不了了。