2017-02-17 6 views
1

でカラムを更新します。私はすでにrow_numと呼ばれるテーブルの列を持っていますが、実際の数で更新する必要があります。私は以下のコードを使用しようとしましたが、動作しません。私は大きなテーブルがあり、Teradataの中で、それに行番号を追加する必要がある行番号

update database.time 
set row_num = INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY 
(START WITH 1 
INCREMENT BY 1 
MINVALUE 1 
NO CYCLE)) 

助けてください。ありがとう!!

+0

* *大きなテーブルどれくらい大きいですか? – dnoeth

+0

テーブルが〜4bレコードです – Kristen

+0

なぜそのテーブルにシーケンス番号を割り当てたいのですか? – dnoeth

答えて

0

あなたは各行を一意に識別するID列を持っている場合は、あなたが行うことができます:

update t 
    set t.row_num = tt.seqnum 
    from database.time t, 
     (select t.*, row_number() over (order by id) as seqnum 
      from database.time t 
     ) tt 
    where t.id = tt.id; 
+0

これはTeradata構文 –

0
update t 

from mytable t 
     ,(select  t.* 
        ,cast(row_number() over (order by id) as bigint) as rn 

     from  mytable t 
     ) tt 

set  row_num = tt.rn 

where t.id = tt.id 
; 
+0

P.s.ではありません。 - @dnoethは大きなテーブルの場合、UPDATEではなくCTASを使用することを提案しますが、これはまったく正しいものです。 –

+0

そして、Kristenがクエリを実行すると、ROW_NUMBERがデフォルトでIntを返すため、Numeric Overflowで失敗します。しかし、これはあまりにも:-) – dnoeth

+0

@dnoeth、元の更新のために起こる - 必ずしもそうではありません、念のためにだけ:-)バージョンと設定によって異なります - 私は答え –

関連する問題