标签:
1 CREATE PROCEDURE [dbo].[P_PageByRownumber] 2 ( 3 @tbName VARCHAR(255), --表名 4 @tbGetFields VARCHAR(max)= ‘*‘, --返回字段 5 @OrderfldName VARCHAR(255), --排序的字段名 6 @PageSize INT=20, --页尺寸 7 @PageIndex INT=1, --页码 8 @OrderType bit = 0, --0升序,非0降序 9 @strWhere VARCHAR(max)=‘‘, --查询条件 10 @TotalCount INT OUTPUT --返回总记录数 11 ) 12 AS 13 BEGIN 14 DECLARE @strSql VARCHAR(max) --主语句 15 DECLARE @strSqlCount NVARCHAR(max) --查询记录总数主语句 16 DECLARE @strOrder VARCHAR(300) -- 排序类型 17 DECLARE @RecoderCount int --总记录数 18 --------------总记录数--------------- 19 set @strWhere=replace(@strWhere,‘&dyh‘,‘‘‘‘) 20 IF ISNULL(@strWhere,‘‘) <>‘‘ 21 SET @strSqlCount=‘Select @TotalCout=count(*) from ‘ + @tbName + ‘ where 1=1 ‘+ @strWhere 22 ELSE SET @strSqlCount=‘Select @TotalCout=count(*) from ‘ + @tbName 23 24 --exec(@strSqlCount) 25 exec sp_executesql @strSqlCount,N‘@TotalCout int output‘,@TotalCount output 26 --------------分页------------ 27 IF @PageIndex <= 0 SET @PageIndex = 1 28 29 IF(@OrderType<>0) SET @strOrder=‘ ORDER BY ‘+@OrderfldName+‘ DESC ‘ 30 ELSE SET @strOrder=‘ ORDER BY ‘+@OrderfldName+‘ ASC ‘ 31 32 SET @strSql=‘SELECT * FROM 33 (SELECT ROW_NUMBER() OVER(‘+@strOrder+‘) RowNo,‘+ @tbGetFields+‘ FROM ‘ + @tbName + ‘ WHERE 1=1 ‘ + @strWhere+‘ ) tb 34 WHERE tb.RowNo BETWEEN ‘+str((@PageIndex-1)*@PageSize+1)+‘ AND ‘ +str(@PageIndex*@PageSize) 35 36 exec(@strSql) 37 END 38 GO
PS.查询条件参数字符串中单引号用‘&dyh‘代替,转义问题未解决,暂时用特殊字符替换处理了。
标签:
原文地址:http://www.cnblogs.com/servant/p/4447963.html