Как получить текущий номер строки в запросе SQL Server 2000? - PullRequest
5 голосов
/ 16 ноября 2009

Как получить номер строки в запросе SQL с использованием SQL Server 2000, где функция ROW_NUMBER() не поддерживается?

Ответы [ 5 ]

7 голосов
/ 16 ноября 2009

Вы всегда можете попробовать использовать временную таблицу со столбцом идентификаторов

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>
3 голосов
/ 16 ноября 2009

Другой способ создать временную таблицу с идентификатором:

SELECT Field1, Field2, IDENTITY(int, 1,1) AS MyID 
INTO #Temp 
FROM Table1
1 голос
/ 16 ноября 2009

Вы не можете использовать Row_Number () в Sql Server 2000 - он был представлен в 2005 году.

Если вы хотите использовать Row_Number для подкачки, вот несколько идей о том, как выполнить эффективную подкачку в SQL 2000:

1 голос
/ 16 ноября 2009
0 голосов
/ 16 ноября 2009

Не могли бы вы уточнить, как приведенный ниже запрос решит проблему?

ВЫБРАТЬ (ВЫБЕРИТЕ СУММУ (1)

ОТ specimen_source_ref

ГДЕ specimen_source_rcd <= reg.specimen_source_rcd </p>

) КАК «Номер строки»

, *

FROM specimen_source_ref reg

...