循环并更改Firebird数据库中的所有记录号

时间:2018-08-06 07:11:50

标签: firebird firebird2.5

我有一个数据库表,其中包含用生成器创建的唯一记录号,但是由于代码(设置生成器)中的错误,记录号突然变大,因为跳过了许多数字。我想重写从1开始的所有记录号,并以总记录号结束。使用应用程序将花费很多时间。 从Firebird的文档中可以看到,使用循环应该是一个简单的任务,但是我没有Firebird编程的经验,我只使用简单的SQL语句,有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

实际上,不需要编程循环,简单的update语句应该可以。首先,重置生成器:

SET GENERATOR my_GEN TO 0;

,然后更新为其分配新ID的所有记录

update tab set recno = gen_id(my_GEN, 1) order by recno asc;

它假定对recno字段的所有引用都是通过带有ON UPDATE CASCADE的外键进行的,否则您将弄乱数据或更新失败。

在此操作期间,数据库中应该没有其他用户!

话虽如此,您真的不应该在意记录数的差距。