【问题标题】:Liquibase SQL Server script fails on H2 db testsLiquibase SQL Server 脚本在 H2 数据库测试中失败
【发布时间】:2020-05-08 07:40:23
【问题描述】:

我的 SQL Server 数据库有 liquibase 变更集,就像这样

<changeSet author="diff-generated" id="1579082307417-3">
        <sql>
            alter table UsersRoles
            add Id int identity
        </sql>
    </changeSet>
    <changeSet author="diff-generated" id="1579082307417-4">
        <sql>
            alter table UsersRoles
            add constraint UsersRoles_pk
            primary key nonclustered(Id)
        </sql>
    </changeSet>

当我在我的 SQL Server 上运行带有 liquibase 的应用程序时,它可以工作。

但我正在尝试通过 test 运行相同的操作 - 我遇到了错误。其他变更集执行完美。

原因:org.h2.jdbc.JdbcSQLSyntaxErrorException: 语法错误 SQL 语句“ALTER TABLE USERSROLES 添加约束用户ROLES_PK PRIMARY KEY NONCLUSTERED[*] (ID) "; 预期 "HASH, ("; SQL 语句:alter table UsersRoles 添加约束 UsersRoles_pk 主键非聚集 (Id) [42001-199]

测试中 liquibase 的设置是

changeLogFile=classpath:/liquibase/database-changelog.xml
url=jdbc:h2:mem:testDb;MODE=MSSQLServer
username=SA
password=
driver=org.h2.Driver

我尝试将驱动程序更改为 SQL Server 驱动程序,但这不起作用。 可能是什么问题?

【问题讨论】:

    标签: java sql-server h2 liquibase


    【解决方案1】:

    H2 不支持 SQL Server 中的 NONCLUSTERED 子句,您需要为 H2 删除它。

    alter table UsersRoles
    add constraint UsersRoles_pk
    primary key (Id)
    

    【讨论】:

    • 谢谢,不幸的是我得到了同样的错误,只是没有错误消息中的非聚集。我现在做的解决方法是使用变更集的 dbms 选项拆分 h2 和 mssql 的脚本。对于 H2,我使用 xml 表示法编写它,而不是纯 sql
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2017-09-25
    • 2021-10-24
    • 1970-01-01
    • 2011-08-13
    • 2010-09-06
    • 2021-05-08
    相关资源
    最近更新 更多