我现在有多个线程同时update 一张表 update是根据不同流水号的主键来操作的。   但是出现死锁的情况 牺牲了一下进程。
在sql里面加上了with(rowlock) 但是没什么用处。  个人感觉锁表。   希望高人回答,或者给点建议。

解决方案 »

  1.   

    with rowlock 是加行锁。还是分析下你死锁的详细信息吧。估计是你update的时候又select了。
      

  2.   


    --加上表锁
    SELECT * FROM table WITH (TABLOCKX) 
      

  3.   

      我想请教一下  update 的时候又select为什么这么容易死锁。select也是有主键查询的 不会影响别的查询。
      

  4.   

    死锁的基本原理是进程互相锁住对方需要的资源.
    看一下系统日志,可以查到死锁详细的信息,包括互相锁住哪个数据文件的哪个数据页.
    用xp_readerrorlog查看.
      

  5.   

    2005里面没有snapshot提供一致性读吗!读写互不block!
      

  6.   

    多线程对一张表更新,本来就不好啊。你可以在更新前建一个DataTable对象,把待更新的数据放到DataTable对象里,待这轮多线程完后,再操作数据库,采用整表提交方式在数据库对这个数据集批量更新比较好。你可以试者以这种方式处理下