paging.....
IF DB_ID('PAGING') IS NOT NULL
BEGIN
USE MASTER
ALTER DATABASE PAGING SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE PAGING
END
CREATE DATABASE [PAGING] ON PRIMARY
( NAME = N'PAGING', FILENAME = N'L:\MSSQL\PAGING.MDF' , SIZE = 20MB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB )
LOG ON
( NAME = N'PAGING_LOG', FILENAME = N'L:\MSSQL\PAGING_LOG.LDF' , SIZE = 20MB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB)
GO
USE PAGING
GO
WITH TEMP AS
(
SELECT TOP 1000000
CAST(ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS INT) IDX
, 'PNAME_'+RIGHT(REPLICATE('0',7)+CAST(CAST(ABS(CHECKSUM(NEWID())) % 1000 AS INT) AS VARCHAR(10)),7)+CHAR(ASCII('A') + ABS(CHECKSUM(NEWID()))%10) PRODUCTNAME
FROM SYS.OBJECTS A1
CROSS JOIN SYS.OBJECTS A2
CROSS JOIN SYS.OBJECTS A3
CROSS JOIN SYS.OBJECTS A4
CROSS JOIN SYS.OBJECTS A5
)
SELECT IDX, PRODUCTNAME, CAST(SUBSTRING(PRODUCTNAME,7,7) AS INT) PRODUCTID
, CAST(ABS(CHECKSUM(NEWID())) % 100 AS INT) SHOPID
, CAST(ABS(CHECKSUM(NEWID())) % 1000000 AS INT) PRICE
, DATEADD(MINUTE, CAST(ABS(CHECKSUM(NEWID())) % 20000 AS INT) * -1, GETDATE()) INSERTTIME
INTO TBLX
FROM TEMP
GO
CREATE UNIQUE CLUSTERED INDEX UCL_TBLX ON TBLX (IDX)
CREATE UNIQUE NONCLUSTERED INDEX NC_TBLX_01 ON TBLX (INSERTTIME, IDX)
DECLARE @ROWS_PER_PAGE INT
,@JUMP_PAGE INT
,@INSERTTIME DATETIME
,@IDX INT
SELECT @ROWS_PER_PAGE = 2
,@JUMP_PAGE = 100
,@INSERTTIME = '2012-10-15 07:10:09.557'
,@IDX = 73413
--SELECT TOP 100 * FROM TBLX ORDER BY INSERTTIME, IDX
SELECT *
FROM (SELECT *
FROM (SELECT TOP (@ROWS_PER_PAGE + (@ROWS_PER_PAGE * @JUMP_PAGE)) T.IDX, T.INSERTTIME
, ROW_NUMBER() OVER (ORDER BY T.INSERTTIME, T.IDX) RNUM
FROM DBO.TBLX T
WHERE T.INSERTTIME >= @INSERTTIME
AND ((T.INSERTTIME = @INSERTTIME AND T.IDX > @IDX) OR (T.INSERTTIME > @INSERTTIME))
ORDER BY T.INSERTTIME, IDX) V
WHERE RNUM >= @ROWS_PER_PAGE * @JUMP_PAGE + 1
AND RNUM <= @ROWS_PER_PAGE * @JUMP_PAGE + @ROWS_PER_PAGE) A
JOIN TBLX B
ON A.IDX = B.IDX
ORDER BY B.INSERTTIME, B.IDX;