有一个作业每天固定时间执行,就是计算一些数据并更新(批量update语句)到一张表(表A)中。
但是昨天作业执行时出现以下错误,主要是说死锁的问题。Transaction (Process ID 122) was deadlocked on lock resources with another process and has 
been chosen as the deadlock victim. Rerun the transaction. [SQLSTATE 40001] (Error 1205).  
The step failed.我这里的情况是:在作业更新表A时,若用户在系统中进行操作,也会有sql语句更新表A。
他们同时更新表A,导致错误。
请问如何避免这种错误,或者sql语句需要怎么优化呢?

解决方案 »

  1.   

    UPDLOCK :指定在读表中数据时设置修改锁(update lock)而不是设置共享锁,该锁一直保持到这个语句或整个事务结束,使用UPDLOCK的作用是允许用户先读取数据(而且不阻塞其他用户读数据),并且保证在后来再更新数据时,这一段时间内这些数据没有被其他用户修改。