主表中数据要求每条数据只能被查出一次,所以把查过的ID记录到一张新表里,为了保证原子性,想要一条语句完成,请帮忙看下面的语句为何报错,有何解决方案?
注意,因此条语句被并发访问的很高,所以不能分两步走,升级隔离级别会导致其它部分死锁,所以如果能在这一条语句上解决最好。
SQL代码如下:
DECLARE @QuestionList TABLE(ID INT PRIMARY KEY,StudentCode NVARCHAR(50)) INSERT INTO @QuestionList(ID,StudentCode) OUTPUT inserted.ID,GETDATE() INTO [01_SubjectiveScoreInfoFlag](ID,CreateDate) --加了这句后报错 SELECT TOP 300 SS.ID,SS.StudentCode FROM [01_SubjectiveScoreInfo] AS SS WITH(READPAST) INNER JOIN SubjectiveItemInfo AS SI ON SS.TestCode=SI.TestCode AND SS.MajorQuestionID=SI.MajorQuestionID AND SS.MinorQuestionID=SI.MinorQuestionID WHERE SS.TestCode='111111111116010417010003' AND SI.QuestionGroupCode='11111111111601041701000304' AND (SI.MinorQuestionCount=0 OR SI.MinorQuestionID>0) AND NOT EXISTS ( SELECT TOP 1 1 FROM [01_SubjectiveScoreInfoFlag] WHERE ID = SS.ID )
报错信息如下:
Location: E:\sql9_sp2_t\sql\ntdbms\storeng\include\xdesimp.h:293
Expression: 0
SPID: 53
Process ID: 6880
消息 3624,级别 20,状态 1,第 3 行
系统断定检查已失败。有关详细信息,请查看 SQL Server 错误日志
消息 0,级别 20,状态 0,第 0 行
当前命令发生了严重错误。应放弃任何可能产生的结果。