2012-02-20 32 views

回答

4

可以使用RRN標量函數指定的相對記錄號:

update table set id=rrn(table) 
+0

+1我刪除了我的答案,因爲它沒有添加任何值。 – Paparazzi 2012-02-20 22:37:53

+0

如果物理文件設置爲不重複使用已刪除的記錄,然後有人在其上執行了RGZPFM,是否可以導致RRN發生更改,從而允許ID列中出現重複值的可能性? – 2012-02-29 19:04:20

+0

@Tracy如果文件得到重新組織,RRN解決方案不會持續正常工作。在這種情況下,他們可以使用RRN來初始分配鍵,然後使用子查詢來計算MAX(id)+ 1。 – jamesallman 2012-02-29 19:16:20

4

你可以使用Sequence對象。例如

CREATE SEQUENCE MySeq 
    as {numeric-datatype} 

的數據類型可以是SMALLINT,INTEGER,BIGINT,DECIMAL或NUMERIC,用零(即沒有小數位)的規模。數據區域被創建以存儲該值。

然後,您可以使用一個NEXT VALUE FOR表達檢索和遞增的順序,在

UPDATE MyTable SET id = NEXT VALUE FOR MySeq 

如果你想知道分配您可以使用表達式Previous value for mySeq

的最後一個值此方法不會與RRN()一樣快,但在某些情況下可能有用,例如當您希望在不同表格中有唯一的數字時。

+0

在一些快速測試中,我發現這種方法很容易使用MAX(id)。 – WarrenT 2013-01-17 00:44:03

0

也許最簡單的[和最​​快]是,添加新的列 [即不能是一個自動增量柱]時,要添加列GENERATED ALWAYS AS IDENTITY [從而是一個自動增量柱],然後ALTER TABLEDROP IDENTITY該列的屬性,使得該列爲不再是自動遞增的列。無需創建單獨的SEQUENCE。當然,一定要首先進行測試,並重復使用TABLE進行更改,最好在該副本中使用一小部分數據[所以測試實際上也必須處理數據],最後查看DEFAULT和NULL首選項等列屬性;即ADD COLUMN和/或ALTER COLUMN的要求可能不同於以下給出的僅作爲簡單的示例[在v5r3上用DB2 for i5/OS驗證;推測成功通過DB2 for IBM i 7.3]:

alter table has_no_id /* err, will have ID column, afterward */ 
    add column id_added integer generated always as identity 
    ; 
    alter table has_no_id /* err, will since, have no ID column */ 
    alter column id_added drop identity 
    ; 
相關問題