【问题标题】:Additional "GO" after liquibase updateliquibase 更新后的附加“GO”
【发布时间】:2019-02-17 00:11:13
【问题描述】:

更新到 liquibase 3.6.1 后,如果我们的旧 <sql> 更改集使用 DECLARE 变量,则会损坏。

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

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

【问题讨论】:

    标签: sql-server liquibase


    【解决方案1】:

    T-SQL 变量的范围在 T-SQL 批处理中。批处理通过“GO”命令完成。 因此,在 GO 之后,@foo 必须重新声明。

    例如:

    声明@foo int = 0;

    选择@foo; -- 这行会报错。

    如果 GO 移动到最后,那么它会工作,并返回 @foo 的值。

    声明@foo int = 1;

    选择@foo; -- 此行将返回 1。

    Batch Scope 不是 SQL Server 的新行为,它是从版本 1 开始的行为。

    尝试查看 LiquidBase 的 'sqlFile' 标签,并查看 endDelimiter 属性或 splitStatements 属性是否设置错误。

    【讨论】:

    • 我知道,问题是在版本升级之前运行良好的 liquibase 脚本的空行中添加了额外的 GO。
    • 你能检查'sqlFile'标签吗? liquibase.org/documentation/changes/sql_file.html
    • 哦,我完全错过了 splitStatements 的部分,似乎他们在某些版本中修复了一个错误,使我们的分号不能算作语句拆分器。使用 splitStatements="false" 我们的脚本现在可以像以前一样工作了,谢谢!
    猜你喜欢
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 2022-06-15
    • 2018-01-01
    • 1970-01-01
    • 2015-03-23
    相关资源
    最近更新 更多