日期:2014-05-17 浏览次数:20619 次
USE [test] GO /****** Object: StoredProcedure [dbo].[testcc] ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER proc [dbo].[uspGetPage] ( @Tables nvarchar(1000), --表名 @Fields nvarchar(2000)='*', --字段 @PageIndex int=1, --第N页 @PageSize int=10, --每页的大小 @Where nvarchar(4000)='', --条件 @OrderBy nvarchar(200), --排序 @TotalRecord int = 0 output --符合条件记录数量 ) AS begin Declare @SQL nvarchar(max) -- @Where 处理 SELECT @Where=(CASE WHEN (@Where IS NULL OR @Where='') THEN '' ELSE ' Where '+@Where END) --计算总记录数 set @SQL = 'select @Total = count(1) from ' + @Tables + @Where EXEC sp_executesql @SQL,N'@Total int OUTPUT',@TotalRecord OUTPUT --计算边界 SELECT @PageIndex=(CASE WHEN @PageIndex<1 THEN 1 ELSE @PageIndex-1 END) --下面构造分页函数 SELECT @SQL='select row_number() OVER (ORDER BY '+@ORDERBY+') AS _rowid,* from (SELECT distinct '+ @Fields + ' FROM ' + @Tables + @Where + ') t' --执行分页 Declare @EXECSQL varchar(max) SELECT @EXECSQL='SET ROWCOUNT '+Convert(varchar(4),@PageSize)+'; WITH SP_TABLE AS( '+@SQL+' ) SELECT * FROM SP_TABLE WHERE _rowid > '+ Convert(varchar(50),(@PageIndex * @PageSize))+' ' EXEC(@EXECSQL) --PRINT @EXECSQL --返回页数 END
------解决方案--------------------
--计算总记录数,这里估计也要去掉重复计算中记录数! set @SQL = 'select @Total = count(1) from (SELECT distinct '+ @Fields + ' FROM ' + @Tables + @Where + ') t' EXEC sp_executesql @SQL,N'@Total int OUTPUT',@TotalRecord OUTPUT
------解决方案--------------------
USE [test] GO /****** Object: StoredProcedure [dbo].[testcc] ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER proc [dbo].[uspGetPage] ( @Tables nvarchar(1000), --表名 @Fields nvarchar(2000)='*', --字段 @PageIndex int=1, --第N页 @PageSize int=10, --每页的大小 @Where nvarchar(4000)='', --条件 @OrderBy nvarchar(200), --排序 @TotalRecord int = 0 output, --符合条件记录数量 @noreplace bit=0 --为1时去重复 ) AS BEGIN Declare @SQL nvarchar(max) -- @Where 处理 SELECT @Where=(CASE WHEN (@Where IS NULL OR @Where='') THEN '' ELSE ' Where '+@Where END) /*加此段试试*/ if @noreplace=1 --需去重复时 begin set @tables='(select '+fields+' from '+@tables+@where+') as a' set @where='' end --计算总记录数 set @SQL = 'select @Total = count(1) from ' + @Tables