diff --git a/二期需求/dbo.sql b/二期需求/dbo.sql index cdccddf..b2965d9 100644 --- a/二期需求/dbo.sql +++ b/二期需求/dbo.sql @@ -1354,7 +1354,18 @@ BEGIN TRY IF EXISTS(SELECT 1 FROM #ItemSeed s JOIN #RuleMap m ON m.SourceId=s.SourceRuleId WHERE NOT EXISTS(SELECT 1 FROM dbo.ScoreRuleItem i WHERE i.ScoreRuleId=m.TargetId AND i.JudgeRoleType=s.JudgeRoleType AND i.ItemCode=s.ItemCode AND i.DeleteMark=s.DeleteMark)) THROW 51004,N'计分规则明细种子ID被占用且业务键不存在,无法安全初始化。',1; - -- 若重复执行初始化脚本,物理删除已不在最终种子中的旧交互绳难度项。 + -- 若重复执行初始化脚本,先保留历史评分快照并解除规则项引用,再物理删除旧交互绳难度项。 + IF OBJECT_ID(N'dbo.EventJudgeScoreDetail',N'U') IS NOT NULL + BEGIN + UPDATE detail + SET ScoreRuleItemId=NULL,UpdatedUserId=1000,UpdatedTime=SYSUTCDATETIME() + FROM dbo.EventJudgeScoreDetail detail + JOIN dbo.ScoreRuleItem item ON item.Id=detail.ScoreRuleItemId + JOIN #RuleMap map ON map.TargetId=item.ScoreRuleId AND map.SourceId IN (3500,3600) + WHERE item.JudgeRoleType IN (N'DJ',N'DT') + AND item.ItemType=1 + AND NOT EXISTS(SELECT 1 FROM #ItemSeed seed WHERE seed.SourceRuleId=map.SourceId AND seed.JudgeRoleType=item.JudgeRoleType AND seed.ItemCode=item.ItemCode); + END; DELETE i FROM dbo.ScoreRuleItem i JOIN #RuleMap m ON m.TargetId=i.ScoreRuleId AND m.SourceId IN (3500,3600) diff --git a/二期需求/上线/dbo_insert.sql b/二期需求/上线/dbo_insert.sql index 0b6150f..e36dd0e 100644 --- a/二期需求/上线/dbo_insert.sql +++ b/二期需求/上线/dbo_insert.sql @@ -571,7 +571,18 @@ BEGIN TRY IF EXISTS(SELECT 1 FROM #ItemSeed s JOIN #RuleMap m ON m.SourceId=s.SourceRuleId WHERE NOT EXISTS(SELECT 1 FROM dbo.ScoreRuleItem i WHERE i.ScoreRuleId=m.TargetId AND i.JudgeRoleType=s.JudgeRoleType AND i.ItemCode=s.ItemCode AND i.DeleteMark=s.DeleteMark)) THROW 51004,N'计分规则明细种子ID被占用且业务键不存在,无法安全初始化。',1; - -- 若重复执行初始化脚本,物理删除已不在最终种子中的旧交互绳难度项。 + -- 若重复执行初始化脚本,先保留历史评分快照并解除规则项引用,再物理删除旧交互绳难度项。 + IF OBJECT_ID(N'dbo.EventJudgeScoreDetail',N'U') IS NOT NULL + BEGIN + UPDATE detail + SET ScoreRuleItemId=NULL,UpdatedUserId=1000,UpdatedTime=SYSUTCDATETIME() + FROM dbo.EventJudgeScoreDetail detail + JOIN dbo.ScoreRuleItem item ON item.Id=detail.ScoreRuleItemId + JOIN #RuleMap map ON map.TargetId=item.ScoreRuleId AND map.SourceId IN (3500,3600) + WHERE item.JudgeRoleType IN (N'DJ',N'DT') + AND item.ItemType=1 + AND NOT EXISTS(SELECT 1 FROM #ItemSeed seed WHERE seed.SourceRuleId=map.SourceId AND seed.JudgeRoleType=item.JudgeRoleType AND seed.ItemCode=item.ItemCode); + END; DELETE i FROM dbo.ScoreRuleItem i JOIN #RuleMap m ON m.TargetId=i.ScoreRuleId AND m.SourceId IN (3500,3600)