【发布时间】:2012-02-06 14:07:46
【问题描述】:
我正在向一个还没有主键列的表引入一个主键列。添加默认值为 0 的普通字段 Id (int) 后,我尝试使用以下更新语句为每条记录创建唯一值:
update t1
set t1.id = (select count(*) from mytable t2 where t2.id <> t1.id)
from mytable t1
我希望对每一行都执行子查询,因为我引用的是t1。每次执行子查询时,计数应该少一,但它不起作用。
结果是每条记录的Id仍然为0。我以前在其他 DBMS 上成功使用过它。我在这里使用的是 SQL Server 2008。
如何为每条记录生成唯一值并更新 Id 字段?
【问题讨论】:
-
你为什么不只是添加一个
ID INT IDENTITY(1,1)列?然后 SQL Server 将自动为ID创建唯一值,您根本不需要更新任何内容..... -
谢谢。我会尽力。我使用许多不同的 DBMS,所以我总是尝试最通用的方法。
标签: sql sql-server correlated-subquery