I will use the same tables for example. In case you find difficulty finding the post about Paging in SQL, I include them here.
Here is the Create table Query:
CREATE TABLE dbo.MsUser ( UserID CHAR(20) PRIMARY KEY, Username VARCHAR(100), Address VARCHAR(50), DivisionID INT )
And here is the query to insert sample data:
-- Insert Data into MsUser INSERT INTO dbo.MsUser VALUES ( 'Himura', 'Miss Himura', 'Earth', 3 ) INSERT INTO dbo.MsUser VALUES ( 'Selvia', 'Selvia', 'Indonesia', 2 ) INSERT INTO dbo.MsUser VALUES ( 'Superman', 'Clark Kent', 'Earth', 2 ) INSERT INTO dbo.MsUser VALUES ( 'SelviaHimura', 'Selvia Himura', 'Earth', 4 ) INSERT INTO dbo.MsUser VALUES ( 'Luck', 'Steven Luck', 'Indonesia', 1 ) INSERT INTO dbo.MsUser VALUES ( 'SuperLuck', 'Super Luck', 'United States', 1 ) INSERT INTO dbo.MsUser VALUES ( 'Selvi', 'Selvi', 'Indonesia', 1 ) INSERT INTO dbo.MsUser VALUES ( 'Lucky', 'Lucky Luke', 'United States', 3 ) INSERT INTO dbo.MsUser VALUES ( 'Steven', 'Steven', 'Earth', 4 )
Here is the data inserted to the tables:
Here is the query to get the data using paging:
DECLARE @PageSize INT, @PageNo INT SELECT a.Username FROM ( SELECT Username, RowNumber = ROW_NUMBER() OVER (ORDER BY Username) FROM MsUser ) a WHERE a.RowNumber BETWEEN (@PageNo - 1 )* @PageSize + 1 AND @PageNo * @PageSize
Note that the key is in this part of code:
ROW_NUMBER() OVER (ORDER BY Username)
If the PageSize is set to 5 item per page, then the top 5 users will be displayed on Page 1 and the next 5 users will be displayed on Page 2.
e.g. 1
PageSize = 5, PageNo = 1
DECLARE @PageSize INT, @PageNo INT SELECT @PageSize = 5, @PageNo = 1 SELECT a.Username FROM ( SELECT Username, RowNumber = ROW_NUMBER() OVER (ORDER BY Username) FROM MsUser ) a WHERE a.RowNumber BETWEEN (@PageNo - 1 )* @PageSize + 1 AND @PageNo * @PageSize
The data retrieved on Page 1 will be:
e.g. 2
PageSize = 5, PageNo = 2
DECLARE @PageSize INT, @PageNo INT SELECT @PageSize = 5, @PageNo = 2 SELECT a.Username FROM ( SELECT Username, RowNumber = ROW_NUMBER() OVER (ORDER BY Username) FROM MsUser ) a WHERE a.RowNumber BETWEEN (@PageNo - 1 )* @PageSize + 1 AND @PageNo * @PageSize
And the data retrieved on Page 2 will be:
0 comments:
Post a Comment