CREATEPROCEDURE SelectPagedSQL ( @SQLnvarchar(512), @IndexFieldnvarchar(100), @PageSizeint=10, @PageIndexint=1, @Sortnvarchar(128)=@IndexField, @TotalCountint=0 output ) AS declare@strSQLnvarchar(1024) set nocount on set@strSQL=' select @TotalCount=count(*) from ('+@SQL+') as t ' exec sp_executesql @strSQL, N'@TotalCount int=0 OUTPUT', @TotalCount=@TotalCount OUTPUT declare@ItemCountint set@ItemCount=@TotalCount-@PageSize*@PageIndex if(@ItemCount<0) set@ItemCount=@ItemCount+@PageSize else set@ItemCount=@PageSize if(@ItemCount<0)return1 set@strSQL='SELECT * FROM (SELECT TOP '+str(@ItemCount)+' * FROM (SELECT TOP '+str(@PageSize*@PageIndex)+' * FROM ('+@SQL+') AS t0 ORDER BY '+@IndexField+' ASC) AS t1 ORDER BY '+@IndexField+' DESC) AS t2 ORDER BY '+@Sort exec sp_executesql @strSQL GO