2012-08-10 42 views
2

我有一張沒有唯一ID的表。我想創建一個存儲過程,將每行的數字作爲ID添加到行中,但我不知道如何獲取當前行號。這是我做了什麼直到現在Firebird 2.5 - 從存儲過程向表中的每一行添加唯一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 

回答

5

我認爲更好的辦法是:

  1. 添加新的空列(姑且稱之爲ID)。
  2. 創建一個生成器/序列(我們稱之爲GEN_ID)。
  3. 創建更新/插入觸發器之前,只要NEW.IDnull就從序列中獲取新值。 Example
  4. update table set ID = ID。 (這將填充密鑰。)
  5. ID列更改爲非空。

獎金。觸發器可以留在那裏,因爲它會在新插入的行中生成值。

+0

工程就像一個魅力。謝謝+1並接受 – RBA 2012-08-10 10:21:19