Sql server 防止sql server存储过程中的交易锁定和竞争条件

Sql server 防止sql server存储过程中的交易锁定和竞争条件,sql-server,stored-procedures,deadlock,race-condition,Sql Server,Stored Procedures,Deadlock,Race Condition,我有一个这样的存储过程: { delete from outbox where status=1 // delete previous sent record update outbox set status=1 where .... // flag some record select from outbox where status=1 // select them for send } 多线程调用此存储过程并发生死锁。 1是否有任何解决方案来释放存

我有一个这样的存储过程:

{
delete from outbox where status=1         // delete previous sent record
update outbox set status=1 where ....     // flag some record
select from outbox where status=1         // select them for send
}
多线程调用此存储过程并发生死锁。 1是否有任何解决方案来释放存储过程中每个查询之间的锁? 或 2防止SP(SPs)的并发执行


谢谢

如果您想阻止SP的并发执行,那么有一种方法。使用所谓的


您也可以进行此操作

分批执行……正确规划锁定。提示可以避免锁定。以及can传输隔离级别。你有控制权——你只是不使用它。这是SQL基础知识……如果您在发件箱中指定要删除和更新的特定项目,并在选择中指定带有(NOLOCK)的
,您应该会得到更好的结果。但是,您不能像那样运行删除和更新,希望不要出现死锁