【发布时间】:2010-12-17 01:23:21
【问题描述】:
在不支持 ROW_NUMBER() 函数的情况下,如何使用 SQL Server 2000 获取 SQL 查询中的行号?
【问题讨论】:
标签: sql sql-server sql-server-2000
在不支持 ROW_NUMBER() 函数的情况下,如何使用 SQL Server 2000 获取 SQL 查询中的行号?
【问题讨论】:
标签: sql sql-server sql-server-2000
您不能在 Sql Server 2000 中使用 Row_Number() - 它是在 2005 年推出的。
如果您想使用 Row_Number 进行分页,这里有一些关于如何在 Sql 2000 中执行高效分页的想法:
【讨论】:
您总是可以尝试使用带有标识列的临时表
DECLARE @table TABLE(
[id] INT IDENTITY(1,1),
Val VARCHAR(10)
)
DECLARE @TableFrom TABLE(
Val VARCHAR(10)
)
INSERT INTO @TableFrom (Val) SELECT 'A'
INSERT INTO @TableFrom (Val) SELECT 'B'
INSERT INTO @TableFrom (Val) SELECT 'C'
INSERT INTO @TableFrom (Val) SELECT 'D'
INSERT INTO @table (Val) SELECT * FROM @TableFrom ORDER BY Val DESC
SELECT * FROM @table
我在 Sql Server 2000 中看到的一些最好的分页使用这种模式
DECLARE @PageStart INT,
@PageEnd INT
SELECT @PageStart = 51,
@PageEnd = 100
SELECT <TABLE>.*
FROM (
SELECT TOP (@PageStart - 1)
<ID>
FROM (
SELECT TOP (@PageEnd)
<ID>
FROM TABLE
ORDER BY <ID> ASC
) SUB
ORDER BY SUB.<ID> DESC
) SUB INNER JOIN
<TABLE> ON SUB.<ID> = <TABLE>.<ID>
ORDER BY SUB.<ID>
【讨论】:
您能否详细说明以下查询将如何解决问题?
选择(选择总和(1)
来自标本来源参考
WHERE sample_source_rcd
) AS '行号'
,*
来自 标本源参考注册
【讨论】:
另一种使用身份创建临时表的方法:
SELECT Field1, Field2, IDENTITY(int, 1,1) AS MyID
INTO #Temp
FROM Table1
【讨论】:
另一种不使用 SQL 定义函数的方法如下:
SELECT
(SELECT COUNT(1) + 1 FROM YourTable t2 WHERE t2.Id < t.Id) AS RowNumber
FROM YourTable t
这有点棘手,但似乎比其他人给你的选项更简单。
【讨论】: