There is no equivalent in SQL Server 2000 and before.
You need to work around it - e.g. create a temporary table with an identity field.
The following example retrieves rows 11 - 20
DECLARE @temp TABLE (CustomerID int, CustName varchar(50), Row_num int identity (1,1))
INSERT INTO @temp SELECT TOP 20 CustomerID, CustName FROM Customers ORDER BY DateSignedUp ASC
SELECT CustomerID, CustName FROM @temp WHERE Row_num > 10
Note that if you want to use a parameter for the offset then you need to change things, because you can't pass a parameter to TOP. See the next example:
declare @offset int
declare @numrows int
DECLARE @temp TABLE (CustomerID int, CustName varchar(50), Row_num int identity (1,1))
SET ROWCOUNT (@offset + @numrows) -- works like top
INSERT INTO @temp SELECT TOP 20 CustomerID, CustName FROM Customers ORDER BY DateSignedUp ASC
SET ROWCOUNT 0 -- switch off the limit
SELECT CustomerID, CustName FROM @temp WHERE Row_num > @offset
SQL server 2005 has row-numbering functions built in, but still has no OFFSET command.
The equivalent for SQL server 2005 would be:
SELECT CustomerID, CustName FROM ( SELECT CustomerID, Custname, R = Row_Number() OVER (ORDER BY DateSignedUp ASC) FROM Customers) subqry WHERE R>10 AND R<=20