程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了向 SQL Server 和 H2/Liquibase 中的现有表添加带有标记主键的自动增量大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决向 SQL Server 和 H2/Liquibase 中的现有表添加带有标记主键的自动增量?

开发过程中遇到向 SQL Server 和 H2/Liquibase 中的现有表添加带有标记主键的自动增量的问题如何解决?下面主要结合日常开发的经验,给出你关于向 SQL Server 和 H2/Liquibase 中的现有表添加带有标记主键的自动增量的解决方法建议,希望对你解决向 SQL Server 和 H2/Liquibase 中的现有表添加带有标记主键的自动增量有所启发或帮助;

我目前正在使用 liquibase 将更改应用于 H2sql Server

目标:

  • 向现有表添加具有自动增量的列 ID
  • ID
  • 添加带有约束名称主键约束

liquibase 自动增量不支持 sql Server,所以我需要在 sql 中找到解决方案。 我想要的是这样的

<sql>
    alter table user ADD columN ID int nOT NulL auto_INCREMENT;
</sql>

<addprimaryKey columnnames="ID" consTraintname="userPK" tablename="user"/>
@H_197_26@

此语句仅在 H2 中有效,而在 sql Server 中无效。 对于 sql Server,IDENTITY 似乎是应用自动增量的命令,因此我尝试编写另一个使用 IDENTITY 的语句。

IDENTITY 的问题在于它在使用 H2 时会自动创建一个主键,这不是我想要的,因为我必须以某种方式找到并重命名它。使用 IDENTITY 时,sql Server 不会自动创建此主键。

控制主键的名称很重要,并且两个数据库的名称相同。

我将不胜感激。


编辑:

另一个尝试是拆分 sql 命令:

    <sql dbms="h2">
        alter table user ADD ID int auto_increment;
    </sql>

    <sql dbms="mssql">
        alter table user ADD ID int idENTITY(1,1);
    </sql>

    <addprimaryKey columnnames="ID" consTraintname="userPK" tablename="user"/>
@H_197_26@

H2 然而忽略addprimaryKey 中的consTraintname,而是生成另一个名称。我希望名称相同,但我注意到我仍然可以使用 dropprimaryKey 删除它

解决方法

不幸的是,H2 1.4.200 还没有很好地模拟来自 SQL Server 的非标准 IDENTITY@H_197_26@ 子句,并且 SQL Server 不支持 H2 支持的标准标识列(ID BIGINT GENERATED BY DEFAULT AS IDENTITY@H_197_26@ 等)以及其他各种 DBMS。

您需要从 GitHub 上提供的当前源编译 H2: https://github.com/h2database/h2database

build.cmd@H_197_26@ 子目录中有 build.sh@H_197_26@ 和 h2@H_197_26@ 脚本。您需要使用 jar@H_197_26@ 参数(build jar@H_197_26@ 或 ./build.sh jar@H_197_26@)为您的操作系统启动合适的脚本。使用 Java 8 或 11(编译后的 jar 也将与更新的版本兼容)。

有了编译好的快照版本,你就可以使用了

create table TEST1(ID BIGint idENTITY,V int);

create table TEST2(V int);
alter table TEST2 ADD ID BIGint idENTITY;
@H_197_26@

以及 MSSQLServer 兼容模式下的类似命令(将 ;MODE=MSSQLServer@H_197_26@ 附加到 JDBC URL)并且这些命令不会创建意外的主键约束。

大佬总结

以上是大佬教程为你收集整理的向 SQL Server 和 H2/Liquibase 中的现有表添加带有标记主键的自动增量全部内容,希望文章能够帮你解决向 SQL Server 和 H2/Liquibase 中的现有表添加带有标记主键的自动增量所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。