在Liquibase中进行了最近一次更改后,我无法在不导致校验和错误的情况下添加任何其他内容。我不太习惯与Liquibase合作,所以请原谅我的无知。
这是我的最后一个变更集:
-- changeset Conner:492 splitStatements="false" endDelimiter=";" :/
CREATE PROCEDURE dbo.UpdateOrInsertWinningColorsAnswers(@json NVARCHAR(max)) AS
BEGIN
SET NOCOUNT ON
MERGE INTO WinningColorsAnswer W
USING(
SELECT *
FROM OPENJSON(@json)
WITH(
Id int,
Answer varchar(max),
QuestionId int,
SectionId int,
StudentChallengeMappingId int,
CreatedDate datetime2,
CreatedUser varchar(20),
UpdatedDate datetime2,
UpdatedUser varchar(20),
IsDeleted bit
)
) as InputJSON (Id,
Answer,
QuestionId,
SectionId,
StudentChallengeMappingId,
CreatedDate,
CreatedUser,
UpdatedDate,
UpdatedUser,
IsDeleted)
ON(W.StudentChallengeMappingId = InputJSON.StudentChallengeMappingId and W.QuestionId = InputJSON.QuestionId)
WHEN MATCHED THEN UPDATE
SET W.Answer = InputJSON.Answer,
W.UpdatedDate = Convert(datetime, InputJSON.UpdatedDate, 104),
W.UpdatedUser = InputJSON.UpdatedUser
WHEN NOT MATCHED THEN
INSERT(Answer,QuestionId,SectionId,StudentChallengeMappingId,CreatedDate,CreatedUser,UpdatedDate,UpdatedUser,IsDeleted)
VALUES(InputJSON.Answer,
InputJSON.QuestionId,
InputJSON.SectionId,
InputJSON.StudentChallengeMappingId,
Convert(datetime, InputJSON.CreatedDate, 104),
InputJSON.CreatedUser,
Convert(datetime, InputJSON.UpdatedDate, 104),
InputJSON.UpdatedUser,
Cast(InputJSON.IsDeleted as bit))
;
END
/
当我这样添加下一个变更集时:
-- changeset Conner:493
-- code down here
--
--
--
--
--
我收到以下错误消息。
运行Liquibase时出现意外错误:验证失败:1个变更集校验和changelog.msql.sql::492::Conner以前是:8:0bde397236550cd1a364241c50171677,但现在是:8:cd9ef9c9a83fda6bd33543b4322bef-
我没有对-- changeset Conner:492
进行任何更改,那么是什么原因导致了导致校验和无效的更改?
Liquibase论坛上有一个类似帖子的答案。以下是建议的解决方案:
- 运行
clear-checksums
命令,然后运行update
命令。这将清除所有CCD_ 4并在更新期间重新计算它们,这将防止错误- 使用新值将
--validCheckSum
添加到变更集中。(请参阅:示例变更日志:SQL格式| Liquibase文档(- 更新
databasechangelog
表,将特定行的md5sum
设置为NULL
。这将与#1基本相同
参考:
- https://forum.liquibase.org/t/how-to-fix-validationfailedexception-in-liquibase-checksum/6780/6