SQL Server 并发死锁解决案例备忘

复制代码
SET @sql = '
                SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
                SET DEADLOCK_PRIORITY 10
                BEGIN TRAN
                    DECLARE @QuestionList TABLE(ID BIGINT,StudentCode NVARCHAR(50))
                    
                    INSERT INTO @QuestionList(ID,StudentCode)
                    SELECT TOP '+CAST((@QuestionCount*@MinorQuestionCount) AS NVARCHAR(10))+' SS.ID,SS.StudentCode  
                    FROM ['+@CourseID+'_SubjectiveScoreInfo] AS SS WITH(UPDLOCK,READPAST)
                        INNER JOIN SubjectiveItemInfo AS SI
                            ON SS.TestCode=SI.TestCode 
                                AND SS.MajorQuestionID=SI.MajorQuestionID 
                                AND SS.MinorQuestionID=SI.MinorQuestionID
                    WHERE SS.TestCode=''' + @TestCode + '''   
                        AND SS.MarkingStatusID = 1  
                        AND SI.QuestionGroupCode=''' + @QuestionGroupCode + '''   
                        AND (SI.MinorQuestionCount=0 
                            OR SI.MinorQuestionID>0)
                        AND SS.MarkingStepID < 3
                        AND (HandledID1 IS NULL OR HandledID1 <> '''+ @HandledID +''')
                        AND (HandledID2 IS NULL OR HandledID2 <> '''+ @HandledID +''')
                        AND NOT EXISTS
                        (
                            SELECT TOP 1 1 
                            FROM ['+@CourseID+'_SubjectiveScoreInfoFlag] WITH(NOLOCK)
                            WHERE AR = 0 AND ID = SS.ID
                            GROUP BY ID
                            HAVING ((SS.MarkingStepID <2 AND COUNT(*) >= 2) OR (SS.MarkingStepID = 2 AND COUNT(*) >= 3))
                        )
                    ORDER BY SS.StudentCode,SS.MajorQuestionID
                        
                    INSERT INTO #TStudentCode(StudentCode,TaskHandledID,HandleStepId)
                    SELECT DISTINCT TOP '+CAST(@QuestionCount AS NVARCHAR(10))+' StudentCode, null ,0
                    FROM @QuestionList

                    INSERT INTO ['+@CourseID+'_SubjectiveScoreInfoFlag](AR,ID)
                    SELECT 0,ID
                    FROM @QuestionList

                COMMIT TRAN
            ' 
            PRINT @sql
            EXEC  sp_executesql @sql
复制代码

 

posted on   空明流光  阅读(383)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示