Uma técnica para fazer isso no SQL Server 2000 é a seguinte:
1. Criar uma tabela temporária ou uma variável do tipo TABLE com uma coluna do tipo IDENTITY. A coluna IDENTITY servirá para identificar o número da linha.
2. Popular a tabela com um result set já ordenado.
3. Consultar a tabela usando a coluna IDENTITY e especificando quais registros você quer visualizar.
A procedure abaixo demonstra uma técnica para paginar entre os registros da tabela Customers do banco de dados Northwind. A procedure possui dois parâmetros: @Page e @Size os quais determinam quais linhas devem ser retornadas.
CREATE PROCEDURE usp_PaginaCustomers
@Page int, — Número da página
@Size int — Total de registros a ser visualizados por página
AS
— Define a página inicial e a quantidade de registros a ser visualizados
DECLARE @BeginRow int
DECLARE @EndRow int
IF @Page = 1
BEGIN
SELECT @BeginRow = 1, @EndRow = @Size
END
ELSE
BEGIN
SELECT @BeginRow = ((@Page-1) * @Size + 1),
@EndRow = ((@Page-1) * @Size) + @Size
END
—
— Declara a tabela temporária
DECLARE @Stores TABLE
(Customer nchar(10) NOT NULL,
CompanyName nvarchar(80) NOT NULL,
ContactName nvarchar(60) NOT NULL,
RowNum int IDENTITY(1,1))
—
— Insere os registros da tabela dbo.Customers sobre a tabela temporária
INSERT @Stores (Customer, CompanyName,ContactName)
SELECT CustomerID, CompanyName,ContactName
FROM dbo.Customers
ORDER BY CustomerID
—
— Faz o select na tabela temporária retornando o número de registros desejados
SELECT Customer,CompanyName,ContactName,RowNum
FROM @Stores
WHERE RowNum BETWEEN @BeginRow AND @EndRow;
GO
—
Para obter os primeiros 10 registros da primeira página, você pode executar a procedure como o exemplo abaixo:
EXEC usp_PaginaCustomers 1, 10
Para obter os registros de 11 a 20 na segunda página,você pode executar a procedure como o exemplo abaixo:
EXEC usp_PaginaCustomers 2, 10
De 21 a 30 na terceira página:
EXEC usp_PaginaCustomers 3, 10
e assim sucessivamente…
Fonte: Revista SQLServerStandard.com edição Jan/Fev

