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

时间:2012-08-10 09:50:51

标签: 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

1 个答案:

答案 0 :(得分:5)

我认为更好的方法是:

  1. 添加新的可空列(我们称之为ID)。
  2. 创建一个生成器/序列(让我们称之为GEN_ID)。
  3. 创建一个更新/插入前触发器,只要NEW.IDnull,就会从序列中获取新值。 Example
  4. update table set ID = ID。 (这将填充键。)
  5. ID列更改为非空。
  6. 奖金。触发器可以留在那里,因为它将在新插入的行中生成值。