如何将生成器Dest的值设置为生成器Src的实际值?
解决Firebird序列(生成器)同步值的问题
错误原因
你执行的ALTER SEQUENCE Dest RESTART WITH GEN_ID(Src, 0);报错,是因为Firebird的ALTER SEQUENCE语句中,RESTART WITH子句只接受常量值,不允许直接调用GEN_ID()这类函数作为参数,解析器无法识别函数调用,因此抛出SQLCODE -104的语法错误。
正确实现方法
方法1:分步手动执行
先查询出生成器Src的当前值,再用该值重启Dest:
- 获取
Src的当前值:
SELECT GEN_ID(Src, 0) FROM RDB$DATABASE;
- 用上一步得到的数值(假设为
N)执行重启语句:
ALTER SEQUENCE Dest RESTART WITH N;
方法2:用执行块(EXECUTE BLOCK)自动完成
如果需要一次性自动完成,可以用Firebird的执行块来动态获取值并执行修改,无需手动复制数值:
EXECUTE BLOCK AS DECLARE current_val BIGINT; BEGIN -- 获取Src的当前值 current_val = GEN_ID(Src, 0); -- 动态构造并执行ALTER语句 EXECUTE STATEMENT 'ALTER SEQUENCE Dest RESTART WITH ' || current_val; END
内容的提问来源于stack exchange,提问作者TomCat500
相关产品推荐
相关产品推荐

