大佬教程收集整理的这篇文章主要介绍了向 SQL Server 和 H2/Liquibase 中的现有表添加带有标记主键的自动增量,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在使用 liquibase 将更改应用于 H2 和 sql Server。
目标:
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,请注明来意。