CREATE PROCEDURE [dbo].[paging_example] @slice_size int = 0, -- ROWCOUNT 0 will return all results @slice_start int = 1 AS declare @slice_end int set @slice_end = @slice_start + @slice_size - 1 -- Create a buffer for the records from 1..@slice_end declare @paging_buffer table( sort_id int not null identity(1,1) PRIMARY KEY, user_id int not null ); -- SELECT from 1 til the end of the slice into @paging_buffer SET ROWCOUNT @slice_end insert into @paging_buffer (user_id) SELECT user_id FROM Users ORDER BY lastname SET ROWCOUNT 0 select u.user_id, u.firstname, u.lastname from @paging_buffer buffer inner join Users u on u.user_id = buffer.user_id where buffer.sort_id >= @slice_start and buffer.sort_id <= @slice_end order by buffer.sort_id GO