您的位置:首页 > 数据库

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)



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐