/* 修复 2人/3人交互绳基础项目误绑定旧空规则的问题。 - 可重复执行。 - 修正基础项目,确保后续新建场次继承 ROPE_FREESTYLE_WIRE。 - 对尚未开始且没有评分单的既有场次同步修正;已开赛或已有评分历史的场次不自动改写。 */ SET XACT_ABORT ON; BEGIN TRANSACTION; DECLARE @WireRuleId BIGINT = ( SELECT TOP 1 Id FROM dbo.ScoreRule WHERE RuleCode=N'ROPE_FREESTYLE_WIRE' AND DeleteMark=0 ORDER BY Id ); IF @WireRuleId IS NULL THROW 51012,N'未找到交互绳花样计分规则(ROPE_FREESTYLE_WIRE)。',1; IF NOT EXISTS ( SELECT 1 FROM dbo.ScoreRuleItem WHERE ScoreRuleId=@WireRuleId AND DeleteMark=0 ) THROW 51013,N'交互绳花样计分规则没有可用评分项,拒绝更新项目映射。',1; UPDATE dbo.Project SET ScoreRuleId=@WireRuleId, UpdatedUserId=1000, UpdatedTime=SYSUTCDATETIME() WHERE Name IN (N'2人交互绳',N'3人交互绳') AND DeleteMark=0 AND ISNULL(ScoreRuleId,0)<>@WireRuleId; UPDATE s SET ScoreRuleId=@WireRuleId, Version=Version+1, UpdatedUserId=1000, UpdatedTime=SYSUTCDATETIME() FROM dbo.EventSession s JOIN dbo.EventProject ep ON ep.Id=s.EventProjectId AND ep.DeleteMark=0 JOIN dbo.Project p ON p.Id=ep.ProjectId AND p.DeleteMark=0 WHERE p.Name IN (N'2人交互绳',N'3人交互绳') AND s.DeleteMark=0 AND s.SessionStatus IN (0,10,20) AND s.ScoreRuleId<>@WireRuleId AND NOT EXISTS ( SELECT 1 FROM dbo.EventJudgeScoreSheet sheet WHERE sheet.SessionId=s.Id AND sheet.DeleteMark=0 ); COMMIT TRANSACTION;