ALTER PROCEDURE [dbo].[procPageChangeForSql2005] ( @fromSql varchar(4000), @querySql varchar(4000), @whereSql varchar(max), @orderBySql varchar(200), @keyField varchar(100), @PageSize int, --每頁多少條記錄 @PageIndex int, --指定當前爲第幾頁 @TotalRecord int output --返回總記錄數 ) AS BEGIN declare @sql nvarchar(max) declare @totalCountSql nvarchar(MAX) declare @StartRecord int declare @EndRecord int declare @nPageCount int --處理開始點和結束點 IF (@whereSql! = '' AND @whereSql IS NOT NULL) set @whereSql=' where '+ @whereSql else set @whereSql='' --計算總條數 set @totalCountSql= N'select @TotalRecord = count(*) from ' + @fromSql+@whereSql --總記錄數語句 exec sp_executesql @totalCountSql,N'@TotalRecord int out',@TotalRecord output;--返回總記錄數 if(@PageSize>-1) begin set @nPageCount =CONVERT(int, ceiling(@TotalRecord*1.0/@PageSize)) if(@nPageCount=0 and @PageIndex != 0) set @PageIndex = 0 else if (@PageIndex > (@nPageCount - 1)) set @PageIndex = 0 set @StartRecord = (@PageIndex)*@PageSize + 1 set @EndRecord = @StartRecord + @PageSize - 1 --組織Sql語句 set @sql ='(select row_number() over (order by '+ @orderBySql +') as rowId,'+@querySql+' from '+ @fromSql+@whereSql;--查詢語句 set @sql ='select * from ' + @sql + ') as t where rowId between ' + ltrim(str(@StartRecord)) + ' and ' + ltrim(str(@EndRecord)); end else begin IF (@orderBySql! = '' AND @orderBySql IS NOT NULL) set @orderBySql=' order by '+ @orderBySql else set @orderBySql='' set @sql='select '+@querySql+' from '+ @fromSql+@whereSql+@orderBySql end Exec(@sql) END