-----------------------------------------------------------------sqlserver分頁---------------------------------------------------------------- /********************************************************************** 參數:@PrimaryKey 主鍵,@OrderBy 排序字段,@SqlStr sql語句,@PageSize 每頁顯示的記錄,@PageIndex 當前頁(從0開始) ***********************************************************************/ create procedure [dbo].[PageQuery] @PrimaryKey varchar(100),--主鍵 @OrderBy varchar(100),--排序字段 @SqlStr varchar(8000),--sql語句 @PageSize int,--每頁顯示的記錄 @PageIndex int--當前頁(從0開始) --@RecordCount int output --返回的總記錄數 as declare @ExecSql varchar(8000)--要執行的Sql組合 if @OrderBy='' set @OrderBy='order by '+@PrimaryKey+' asc' else if (len(@OrderBy)<8 or upper(substring(@OrderBy,1,8))<>'ORDER BY') set @OrderBy='order by '+@OrderBy --if((len(@OrderBy)>0) and(len(@OrderBy)<8 or upper(substring(@OrderBy,1,8))<>'ORDER BY')) -- set @OrderBy='order by '+@OrderBy if @PageSize=-1--用於ajax的第一次查詢 set @PageSize=0 bin declare @recordCount int,@pageCount int declare @s nvarchar(4000) set @s = N'select @recordCount = count('+@PrimaryKey+') from ('+@SqlStr+') TN' exec sp_executeSql @s,N'@recordCount int output',@recordCount output if(@pageSize>0) set @pageCount = (@recordCount - 1 + @PageSize) / @PageSize;--總頁數 else set @pageCount = 0;--總頁數 if(@pageCount<(@PageIndex+1)) bin set @pageCount=@pageCount-1 exec PageQuery @PrimaryKey,@OrderBy,@SqlStr,@PageSize,@pageCount end else bin if @PageIndex<=0--若是是第一頁就執行這個 bin set @ExecSql='select top '+cast(@PageSize as varchar(100))+' * from ('+@SqlStr+') T '+@OrderBy end else bin if charindex('2000 - 8.00.',@@version)>0 bin set @ExecSql= 'select top '+cast(@PageSize as varchar(100))+' * from ('+@SqlStr+') as T where T.'+@PrimaryKey+' not in (select top '+cast((@PageSize*@PageIndex) as varchar(100))+' '+@PrimaryKey+' from ('+@SqlStr+') T2 '+@OrderBy+') '+ @OrderBy end else bin set @ExecSql= 'select * from ( select * from (SELECT *, #RowNum#=ROW_NUMBER() OVER('+@OrderBy+') FROM ('+@SqlStr+') T1) T2 where T2.#RowNum#>='+cast(@PageSize*@PageIndex+1 as varchar(10))+' and T2.#RowNum#<='+cast(@PageSize*(@PageIndex+1) as varchar(10))+' ) T3 ' end end exec (@ExecSql+' select '+@recordCount+' as RecordCount,'+@pageCount+' as PageCount ') end end