Firebird 2.5 - 从存储过程向表中的每一行添加唯一ID

RBA*_*RBA 2 firebird firebird2.5

我有一个没有唯一ID的表.我想创建一个存储过程,它将行的编号添加到每行作为ID,但我不知道如何获取当前行号.这是我到目前为止所做的

CREATE OR ALTER PROCEDURE INSERTID_MYTABLE 
returns (
    cnt integer)
as
declare variable rnaml_count integer;
begin
  /* Procedure Text */
  Cnt = 1;
  for select count(*) from MYTABLE r into:rnaml_count do
   while (cnt <= rnaml_count) do
    begin
     update MYTABLE set id=:cnt
       where :cnt = /*how should I get the rownumber here from select??*/
     Cnt = Cnt + 1; 
     suspend;
    end
end
Run Code Online (Sandbox Code Playgroud)

cin*_*net 5

我认为更好的方法是:

  1. 添加新的可空列(让我们称之为ID).
  2. 创建一个生成器/序列(让我们调用它GEN_ID).
  3. 创建更新/插入前触发器,从获取新的序列值只要NEW.IDnull.例子.
  4. update table set ID = ID.(这将填充键.)
  5. ID列更改为非null.

奖金.触发器可以留在那里,因为它将在新插入的行中生成值.