为现有表分配唯一值

时间:2018-08-06 21:17:39

标签: unique identity uniqueidentifier id

是否在不重新创建表的情况下向表添加唯一列?我有大约50万条记录。只是想分配一个唯一的号码。我不能删除它,因为数据库系统之间存在很多依赖关系。该表还包含多个视图,因此重新创建一个视图将不会在下游更新任何内容。

设置id =唯一值

set id = cast(floor(random()* 1000000000)as int),其中id为空

不起作用。

显然不能使用窗口函数row_number()或()来分配此函数。还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

大家好,这是我用于此的解决方法。我的表有406,203条记录,我需要分配唯一值而不删除它。我正在Redshift中工作-

更新表名 设置id = cast(floor(random()* 1000000000)as int),其中id为null;

-其中一些值不是唯一的,请拔出下面重复的id值并将其设置回null

创建临时表的计数为 选择ID,计数(*) 来自table_name 按编号分组 按2 desc订购;

更新表名 set id = null where id in(从count中选择id,其中count> 1);

-为重复的空值设置唯一值

更新表名 设置id = cast(floor(random()* 20000000.34)as int),其中id为null;

选择计数(*),计数(不同ID) 来自table_name; -现在是独一无二的!