Вне всякого сравнения : различный инструмент всегда - необходимость.
Вы всегда можете попробовать использовать временную таблицу со столбцом идентификаторов
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>
Другой способ создать временную таблицу с идентификатором для использования:
SELECT Field1, Field2, IDENTITY(int, 1,1) AS MyID
INTO #Temp
FROM Table1
Вы не можете использовать Row_Number () в Sql Server 2000 - он был представлен в 2005 году.
Если вы хотите использовать Row_Number для разбиения по страницам, вот несколько идей о том, как выполнить эффективное разбиение по страницам в Sql 2000:
Не могли бы вы уточнить, как следующий запрос решит проблему?
SELECT (SELECT SUM (1)
FROM specimen_source_ref
WHERE specimen_source_rcd <= reg.specimen_source_rcd
) AS 'Номер строки'
, *
FROM specimen_source_ref reg