生成唯一值
根据您使用的SQL Server版本,您可以使用TOP或SET ROWCOUNT将UPDATE限制为单行。像这样的东西将工作:
select top 1 * from sysobjects
WHILE @@ROWCOUNT > 0
BEGIN
UPDATE TOP 1 Keys SET Key = (SELECT MAX(Key) from Keys)+1 WHERE Key is null
END
但是不理想。我想不出另一种处理重复行的方法 - 除非这是一次性任务,在这种情况下,临时添加一个IDENTITY列将会起作用。
你能解释一下吗? – 2010-11-15 10:39:11
@Nadeem - 不确定你想要解释哪个部分。如果您尝试了它并且无法正常工作,那么会产生什么类型的错误?对于其他方面,如果您在问题中添加了更多信息,则会更好。你使用的是什么版本的SQL?这是一次性任务,还是定期运行?如果定期,是否有一个原因,为什么无法预防NULL摆在首位。 – 2010-11-15 10:50:33
+1为“添加标识列”,正确的答案和正确的方法 – smirkingman 2010-11-15 11:07:20
如果你可以把数据(暂时)到一个单独的表,你可以使用ROW_COUNT():
declare @Keys table ([Key] int not null, [Name] varchar(50) null);
insert into @Keys ([Key], [Name])
select [Key], [Name]
from [Keys]
where [Key] is not null
union all
select [Key] = row_number() over (order by [Name]) +
(select max([Key]) from [Keys]),
[Name]
from [Keys]
where [Key] is null;
truncate table [Keys];
insert into [Keys] select * from @Keys;
是表的整体结构?没有身份字段?你想重复'名称'与不同的'钥匙'? – Oded 2010-11-15 10:22:41
从所提供的示例中,并未完全指定您希望如何执行此操作。你想指定3,4的顺序是什么? – Unreason 2010-11-15 10:23:38
是的我想要不同的键值为相同的名称。 – 2010-11-15 10:24:24