liquibase 更新后额外 "GO"

Additional "GO" after liquibase update

更新到 liquibase 3.6.1 后,如果使用 DECLARE 变量,我们的旧 <sql> 变更集就会崩溃。

显然,现在在有空行的地方添加了额外的 GO 语句,这不是它过去的工作方式,它现在使我们的旧文件抛出 liquibase.exception.DatabaseException: Must declare the scalar variable "@foo".

我们如何解决这个问题或修复我们的旧文件以在旧数据库副本上工作,而不是 运行 再次在最新的副本上工作?

T-SQL变量的作用域在T-SQL批次。使用 "GO" 命令完成批处理。 因此,在 GO 之后,必须重新声明 @foo。

例如:

声明@foo int = 0;

开始

SELECT @foo; -- 这一行会报错。

如果把GO移到最后,那么就可以了,return@foo的值。

声明@foo int = 1;

SELECT @foo; -- 这一行将 return 1.

开始

Batch Scope 不是 SQL 服务器的新行为,它是自版本 1 以来的行为。

尝试查看 LiquidBase 的 'sqlFile' 标签,看看 endDelimiter 属性或 splitStatements 属性是否设置不正确。