如何在不使用标识列的情况下在Sql server 2000中生成RowID

时间:2011-06-27 11:01:35

标签: tsql sql-server-2000

让我构建我的问题......

我说

Name

A
B
C
A
D
B

我想要的是

ID   Name
1    A
2    B
3    C
4    A
5    D
6    B

如果我写 SELECT name, (SELECT COUNT(*) FROM @t AS i2 WHERE i2.Name <= i1.Name) As rn FROM @t AS i1

如果所有名称都是不同/唯一的话它会正常工作......如果它们不是(如本例所示)

即使是NEWID()也没有成功,因为它会随着时间的推移而变化?

我正在使用sql server 2000 ...

请帮忙

1 个答案:

答案 0 :(得分:1)

以下是解决问题的两种方法

1

DECLARE @t TABLE ([ID] [int] IDENTITY(1,1), name CHAR)
INSERT @t VALUES ('b')
INSERT @t VALUES ('a')
INSERT @t VALUES ('c')
INSERT @t VALUES ('b')

SELECT * FROM @t

2

DECLARE @t2 TABLE (name CHAR)
INSERT @t2 (name) VALUES ('b')
INSERT @t2 (name) VALUES ('a')
INSERT @t2 (name) VALUES ('c')
INSERT @t2 (name) VALUES ('b')

SELECT ID = ROW_NUMBER() OVER (ORDER BY b), name 
FROM (SELECT name, null b FROM @t2) temp