UPDLOCK提示查询期间发生死锁

我有一个C#代码使用EntityFramework来执行一堆SQL语句:

using (var context = new MyDbContext())
{
    context.Database.ExecuteSqlCommand(preparedQuery.QueryText);
}

该查询旨在用不断更新的数据更新表,并避免使用Serializable事务隔离级别和UPDLOCK表提示的争用条件问题。 preparedQuery.QueryText是一个如下所示的字符串:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRAN T11;
DECLARE @Flag int;
SET @Flag = (SELECT Count(*)  FROM MyTable  WITH (UPDLOCK) WHERE Field1 = '1' AND Field2 = '2')
IF (@Flag > 0) 
BEGIN
    UPDATE MyTable SET Filed3 = '3'  WHERE Field1 = '1' AND Field2 = '2'
END

有时C#方法抛出一个SqlException并带有以下消息:

事务(进程ID 202)在另一个进程的锁资源上死锁,并被选为死锁受害者。 重新运行交易。

如何在开始时将UPDLOCK表提示的SQL序列化事务死锁? 事务的第一个查询获取数据的更新锁。 此查询可能会导致哪些其他事务处于死锁状态?

链接地址: http://www.djcxy.com/p/5625.html

上一篇: Deadlock occurring during query with UPDLOCK hint

下一篇: Default lock settings SQL Server 2008 R2