使用 SQL 序列

Using SQL sequences

提问人:xMann999 提问时间:8/23/2023 最后编辑:Thom AxMann999 更新时间:8/23/2023 访问量:60

问:

如何将如下所示的sql序列放入liquibase更改日志文件(xml)中?
甚至可能吗?

CREATE SEQUENCE sequence_option_1
START WITH COALESCE((SELECT MAX(id) FROM entity WHERE source = 'source1'), 1);

我没有选择创建具有最大 id 的表。

我想我必须在 T-SQL 中编写这个,那么是否有人知道 Transact-SQL 并可以以某种方式转换此序列并获得类似的结果?

sql-server spring azure-sql-database 序列 liquibase

评论

1赞 Thom A 8/23/2023
为什么需要创建从现有 ID 的值开始的序列?这闻起来像是一个可能的 XY 问题

答:

0赞 htshame 8/23/2023 #1

Liquibase 中有一个 createSequence 更改。但它看起来只接受整数值,并且没有像其他更改那样的属性。startValuestartValueComputed

因此,在您的情况下,您可以使用简单的更改,例如:<sql>

<changeSet id="foo" author="bar">
    <preConditions onFail="MARK_RAN">
        <not>
            <sequenceExists sequenceName="sequence_option_1"/>
        </not>
    </preConditions>
    <sql>
        CREATE SEQUENCE sequence_option_1 
        START WITH COALESCE((SELECT MAX(id) FROM entity WHERE source = 'source1'), 1);
    </sql>
</changeSet>

评论

0赞 xMann999 8/23/2023
它抛出 liquibase.exception.DatabaseException。是数据库故障吗?我正在使用 mssql 和 azure db
0赞 htshame 8/23/2023
有没有堆栈跟踪?还是根本原因?
0赞 xMann999 8/23/2023
它说:上下文初始化过程中遇到异常...创建名为“liquibase”的 bean 时出错...变更集的迁移失败...然后,reasion 是单词“COALESCE”附近的不正确语法
0赞 xMann999 8/23/2023
我尝试了不同的方法,但由于语法原因,总是有错误
1赞 htshame 8/23/2023
所以这意味着你的 sql 请求的语法是错误的。修好它,你应该很好。这不是 liquibase 问题