SQL 单表分页存储过程和单表多字段排序和任意字段分页存储过程
2014-11-24 20:50
399 查看
第一种:单表多字段排序分页存储过程
--支持单表多字段查询,多字段排序
createPROCEDURE[dbo].[UP_GetByPageFiledOrder]
(
@TableNamevarchar(50),--表名
@ReFieldsStrvarchar(200)='*',--字段名(全部字段为*)
@OrderStringvarchar(200),--排序字段(必须!支持多字段不用加orderby)
@WhereStringvarchar(500)=N'',--条件语句(不用加where)
@PageSizeint,--每页多少条记录
@PageIndexint=1,--指定当前为第几页
@TotalRecordintoutput--返回总记录数
)
AS
BEGIN
--处理开始点和结束点
Declare@StartRecordint;
Declare@EndRecordint;
Declare@TotalCountSqlnvarchar(500);
Declare@SqlStringnvarchar(2000);
set@StartRecord=(@PageIndex-1)*@PageSize+1
set@EndRecord=@StartRecord+@PageSize-1
SET@TotalCountSql=N'select@TotalRecord=count(*)from'+@TableName;--总记录数语句
SET@SqlString=N'(selectrow_number()over(orderby'+@OrderString+')asrowId,'+@ReFieldsStr+'from'+@TableName;--查询语句
--
IF(@WhereString!=''or@WhereString!=null)
BEGIN
SET@TotalCountSql=@TotalCountSql+'where'+@WhereString;
SET@SqlString=@SqlString+'where'+@WhereString;
END
--第一次执行得到
--IF(@TotalRecordisnull)
--BEGIN
EXECsp_executesql@totalCountSql,N'@TotalRecordintout',@TotalRecordoutput;--返回总记录数
--END
----执行主语句
set@SqlString='select*from'+@SqlString+')astwhererowIdbetween'+ltrim(str(@StartRecord))+'and'+ltrim(str(@EndRecord));
Exec(@SqlString)
END
下面是调用存储过程
--exec[PROCE_SQL2005PAGECHANGE]'T_ScInfo','*','by2desc,addtimedesc','by1=4andstate=1','2','3',''
第二种:单表效率最高的分页存储过程
动软分页存储过程
ALTERPROCEDURE[dbo].[UP_GetRecordByPage]
@tblNamevarchar(255),--表名
@fldNamevarchar(255),--主键字段名
@PageSizeint=10,--页尺寸
@PageIndexint=1,--页码
@IsReCountbit=0,--返回记录总数,非0值则返回
@OrderTypebit=0,--设置排序类型,非0值则降序
@strWherevarchar(1000)=''--查询条件(注意:不要加where)
AS
declare@strSQLvarchar(6000)--主语句
declare@strTmpvarchar(1000)--临时变量(查询条件过长时可能会出错,可修改为)
declare@strOrdervarchar(400)--排序类型
if@OrderType!=0
begin
set@strTmp='<(selectmin'
set@strOrder='orderby['+@fldName+']desc'
end
else
begin
set@strTmp='>(selectmax'
set@strOrder='orderby['+@fldName+']asc'
end
set@strSQL='selecttop'+str(@PageSize)+'*from['
+@tblName+']where['+@fldName+']'+@strTmp+'(['
+@fldName+'])from(selecttop'+str((@PageIndex-1)*@PageSize)+'['
+@fldName+']from['+@tblName+']'+@strOrder+')astblTmp)'
+@strOrder
if@strWhere!=''
set@strSQL='selecttop'+str(@PageSize)+'*from['
+@tblName+']where['+@fldName+']'+@strTmp+'(['
+@fldName+'])from(selecttop'+str((@PageIndex-1)*@PageSize)+'['
+@fldName+']from['+@tblName+']where'+@strWhere+''
+@strOrder+')astblTmp)and'+@strWhere+''+@strOrder
if@PageIndex=1
begin
set@strTmp=''
if@strWhere!=''
set@strTmp='where'+@strWhere
set@strSQL='selecttop'+str(@PageSize)+'*from['
+@tblName+']'+@strTmp+''+@strOrder
end
if@IsReCount!=0
set@strSQL='selectcount(*)asTotalfrom['+@tblName+']'+'where'+@strWhere
exec(@strSQL)
相关文章推荐
- sql 可按任意字段排序的分页存储过程(转)
- 专用于SqlServer2005的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一)
- 专用于SqlServer2005的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一)
- 专用于SqlServer2005的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一)
- 专用于SqlServer2005的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一)--zt
- SQL分页存储过程(不支持多表联合查询,不支持多字段排序)
- 按任意字段排序的分页存储过程
- SQL Server可按任意字段排序的分页存储过程(不用临时表的方法)
- 可按任意字段排序的分页存储过程
- 可按任意字段排序的分页存储过程
- 可按任意字段排序的分页存储过程
- 专用于SqlServer2005的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一)
- 专用于SqlServer2005的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一)
- 可按任意字段排序的分页存储过程(转)
- 可按任意字段排序的分页存储过程
- SqlServer2005的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一)
- 支持任意字段排序及多表关联查询的存储过程分页
- 可按任意字段排序的分页存储过程(转)
- 目前来看较完美的通用二分法分页存储过程,not in模式,适用于非数值ID,可多字段排序,可以distinct——SQL Server
- 千万数量级分页存储过程2(可支持多表查询,任意排序)