我想在将来将下面的序列列更新为IDENTITY列,并且必须将当前行更新为按update_time升序排列。
如何在Sybase中执行此操作?下面是一个简单的例子。
当前表:
SEQUENCE | UPDATE_TIME | DATA
null | 2016-01-01 | x
null | 2013-01-01 | y
null | 2015-01-01 | z
所需的表:
SEQUENCE | UPDATE_TIME | DATA
3 | 2016-01-01 | x
1 | 2013-01-01 | y
2 | 2015-01-01 | z
我通过将表连接到表本身来实现这一点,但增加了1个ID行。这个额外的行是使用ROW_NUMBER函数通过按update_time升序排序创建的。类似…
UPDATE myTable SET update_seq = tmp。ID从表中创建一个INNER JOINSELECT update_time, data, ROW_NUMBER() OVER (ORDER BY update_seq ASC)作为IDOn a.update_time = tmp.update_timea.data = tmp.data在Sybase ASA上,您可以使用以下更新来计算列:
update [table_name]
set [SEQUENCE]=number(*)
order by [UPDATE_TIME]