set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTERPROCEDURE[dbo].[DividePage] @tabnamenvarchar(2000),--要查询表名 @fidlelistnvarchar(1000),--要查询字段 @wheresqlnvarchar(1000),--查询条件 @pknvarchar(20),--主键 @ordernvarchar(100),--排序字段 @pagenumint,--要查询的页号 @rowsumint,--每页要显示的行数 @allpageint output,--计算总页数 @allrowint output--计算总行数 AS declare@sqlstrnvarchar(4000),@tmpwherenvarchar(4000),@tmpordernvarchar(100) BEGIN if(@order!='') begin set@tmporder=@order end else set@tmporder=@pk; set@tmpwhere=''; if(@wheresql!='') begin set@tmpwhere=' where '+@wheresql; end set@sqlstr=N'select * from(select '+@fidlelist+', ROW_NUMBER() OVER(order by '+@tmporder+') as row from '+@tabname+@tmpwhere+') tmp where row between '+cast(((@pagenum-1)*@rowsum+1) asnvarchar)+' and '+cast(@pagenum*@rowsumasnvarchar); exec sp_executesql @sqlstr set@sqlstr=N'select @allrow1 =count('+@pk+') from '+@tabname+@tmpwhere exec sp_executesql @sqlstr,N'@allrow1 int OUTPUT',@allrow1=@allrow output if(@allrow%@rowsum<>0) begin set@allpage=@allrow/@rowsum+1--获得总页数 end else set@allpage=@allrow/@rowsum----获得总页数 END