• I think the code in that article (the one that uses row_number) has one problem. What if:

    User A retrieves first page (rows 1-25 in name order)

    User B deletes one or more rows that user A retrieved

    User A requests next page (she thinks she is getting 26-50 in name order, and she does, but now some names are shifted to page 1 due to deletion and she missed them)

    The other code here that uses persisted identity column is better IMHO.