SQL Server 2005 - Data Paging
It now becomes a UI standard for displaying records in paginated grid format. If you have list of employees then you always wanted to only show 10 (or something) at a time. And if user wants to see next set of employees he should click on the next button which will pull next set of 10 employees. So this way, every time you will have controlled limit of payload which will pass from server to browser.
There is a common technique used by developers to use induced a primary key in my temporary table and show paginated records from there. You must wanted to learn that approach. Visit:
Manual Paging, part I
http://mceahern.manilasites.com/dotnet/pagingpart1
Paging: Use ADO, getrows, or a Stored Procedure?
http://www.15seconds.com/issue/010308.htm
Is Paging with Recordsets the Best Method?
http://www.15seconds.com/issue/010607.htm
But now in SQL Server 2005, you don’t need to create any temp table etc. to achieve the same result set. Microsoft extent SELECT statement with new ranking function ROW_NUMBER() which return row number in result set itself.
SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNumber, OrderID, OrderDate
FROM Orders
Which will give result some thing like:
RowNumber OrderID OrderDate
-------------------- ----------- -----------------------
1 10248 1996-07-04 00:00:00.000
2 10249 1996-07-05 00:00:00.000
3 10250 1996-07-08 00:00:00.000
4 10251 1996-07-08 00:00:00.000
5 10252 1996-07-09 00:00:00.000
6 10253 1996-07-10 00:00:00.000
7 10254 1996-07-11 00:00:00.000
8 10255 1996-07-12 00:00:00.000
9 10256 1996-07-15 00:00:00.000
10 10257 1996-07-16 00:00:00.000
So now you can utilize this row number of the record to qualify the required records from whole table. How? Here I go
WITH Ordered AS (
SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNumber, OrderID, OrderDate
FROM Orders)
SELECT *
FROM Ordered
WHERE RowNumber between 21 and 30
And result will be something like
RowNumber OrderID OrderDate
-------------------- ----------- -----------------------
21 10268 1996-07-30 00:00:00.000
22 10269 1996-07-31 00:00:00.000
23 10270 1996-08-01 00:00:00.000
24 10271 1996-08-01 00:00:00.000
25 10272 1996-08-02 00:00:00.000
26 10273 1996-08-05 00:00:00.000
27 10274 1996-08-06 00:00:00.000
28 10275 1996-08-07 00:00:00.000
29 10276 1996-08-08 00:00:00.000
30 10277 1996-08-09 00:00:00.000
I know this will going to save lot of afford for me.