Tsql 如何在不使用标识列的情况下在SQLServer2000中生成RowID
让我提出我的问题 我不得不说Tsql 如何在不使用标识列的情况下在SQLServer2000中生成RowID,tsql,sql-server-2000,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 如果我写 选择名称,(从@t中选择COUNT(*)作为i2,其中i2.name这里有两种解决方法 一, 二, 为什么不使用你得到的解决方案呢?同样,这是为了某种程度的“工作良好”,因为你有一个三角形连接,也就是半交叉连接,也就是rbar(一行一行)。真正的问题是,你为什么需要行号?也就是说,你想解决的问题是什么。
Name
A
B
C
A
D
B
我想要的是
ID Name
1 A
2 B
3 C
4 A
5 D
6 B
如果我写
选择名称,(从@t中选择COUNT(*)作为i2,其中i2.name这里有两种解决方法
一,
二,
为什么不使用你得到的解决方案呢?同样,这是为了某种程度的“工作良好”,因为你有一个三角形连接,也就是半交叉连接,也就是rbar(一行一行)。真正的问题是,你为什么需要行号?也就是说,你想解决的问题是什么。那么,也许有一种替代解决方案不需要行号。不要说“我不能使用标识列”。使用temp table/table变量不会更改架构。如果要使用较慢的三角形计数联接,请根据另一个问题的答案进行操作。“ROW_NUMBER”不是可识别的函数name@ApocatastasisSQLServer2008之后是
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
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