2017-02-17 35 views
1

У меня есть большая таблица и вам нужно добавить номера строк в Teradata. У меня есть столбец в таблице, уже названный row_num, но мне нужно обновить его фактическим числом. Я попытался использовать приведенный ниже код, но он не будет работать.Обновление столбца с номером строки

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

Если у вас есть столбец идентификаторов, который однозначно идентифицирует каждую строку, вы можете сделать:

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 собирается предположить, что для большой таблицы вы будете использовать CTAS вместо UPDATE, что совершенно верно. –

+0

И когда Кристен запускает запрос, он будет терпеть неудачу с числовым переполнением, потому что ROW_NUMBER возвращает значение по умолчанию. Но это тоже произойдет для исходного обновления :-) – dnoeth

+0

@dnoeth - Не обязательно, зависит от версии и конфигурации :-) Просто чтобы быть в безопасности - я добавил CAST на ответ –