如何在SQL Server中为每一行的列设置唯一标识符

3

有没有一种方法可以将表中每一行的某些列设置为唯一值,例如:

update mytable set myCol=rownum() 

在SQL Server 2000上使用SQL(不是T/SQL)。

我不能更改模式,但我有一两个备用列。


既然您不能改动模式,那么你是在编写代码实现吗?如果是的话,您使用的是哪种编程语言? - Chase Florell
我想对表执行DML SQL。我不能添加标识列或任何类似的内容。 - mikemay
抱歉,我以为看到了DDL... - Oded
你是否可以按一组字段对行进行排序? - Serge S.
2
SQL Server 2000中的DML SQL确实是T-SQL(Transact-SQL)...为什么您在帖子中明确排除它? - marc_s
显示剩余5条评论
1个回答

8
只要您有一个主键,就可以通过计算行数生成唯一值。例如(将#t替换为您的表名):
update  t
set     t.col1 = (select COUNT(*) from #t t2 where t.pk >= t2.pk)
from    #t t

如果您有一个varchar(36)或更大的字段,您可以生成GUID,这些GUID保证是唯一的:

update  #t
set     col1 = NEWID()

如果两者都没有,您可以使用变量。尽管这种技术不是基于设置的,但它仍然可以很好地工作,但被视为不被赞成的技术:

declare @i int
set @i = 1

update  #t
set     col1 = @i
,       @i = @i + 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接