加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Sqlserver 2008 通用分页储存过程

发布时间:2020-12-12 14:57:24 所属栏目:MsSql教程 来源:网络整理
导读:注意:下面Tbl为TBL ?代码如下: create procedure spc_pageShow ( @tableName??? nvarchar(255),? ---表名 @primaryKeyField? nvarchar(50),--主键列名 @returnFileFieldLists? nvarchar(2000),--需要返回的列 @sortFieldLists? nvarchar(500),--需要排序的列

注意:下面Tbl为TBL

?代码如下:

create procedure spc_pageShow

(

@tableName??? nvarchar(255),? ---表名

@primaryKeyField? nvarchar(50),--主键列名

@returnFileFieldLists? nvarchar(2000),--需要返回的列

@sortFieldLists? nvarchar(500),--需要排序的列(注意:该列在表中必须唯一,否则不能实现分页效果)

@pageSize int? =2,--每页显示的行数

@pageIndex? int =1,--当前页码

@orderType bit =0,--设置排序的类型(非0则降序)

@whereClause nvarchar(500)? ='' --查询条件(注意在下面的sql语句中不加where关键字)

)AS

BEGIN

?? DECLARE @strSQL nvarchar(4000),--主句

?????????????????????? @strSQLCount? nvarchar(1000),

?????????????????????? @strTmp? nvarchar(200),--临时变量

?????????????????????? @strOrder? nvarchar(500),--排序

?????????????????????? @InnerOrder?? nvarchar(600)

????Set ?@whereClause=IsNull(@whereClause,‘’);

????Set ?@InnerOrder=@SortFieldLists;

??? ----返回总页数

?? BEGIN

??????? IF (Len(LTrim(@whereClause))>0)

????????????? Set @strSQLCount? ='select (CASE WHEN Count(*) % '+Cast(@pageSize as nvarchar(30)) +'>0

?????????????????????????????????????????????????????????????????????????????? THEN count(*) / ' + cast(@pageSize as nvarchar(30)) +' +1

?????????????????????????????????????????????????????????????????????????????? ELSE Count(*) / ' + cast(@pageSize as nvarchar(30)) + '

?????????????????????????????????????????????????????????????????????????????? END) AS TotalCount from '+@tableName +' ; ' ;

?? END

?? EXECUTE sp_ExecuteSQL?@strSQLCount;

?

? BEGIN

?????? --设置排序字段

?????? /*

???????? IF (@orderType !=0)

?????????????????? Set @strOrder? ='? order by ' +@SortFieldLists + ' DESC';

??????????ELSE

?????????????????? Set @strSQL ='select Top ' + str(@pageSize) +' '? @parimaryKeyField? + ',' + @ReturnFieldLists +

????????????????? ' From ' +@tableName + 'order by '+@Innerorder;

????? */

???? ----根据页码提取行数据(如果第一页就执行以上代码,这样会加快执行速度)

??? IF (@pageIndex =1 )

??? BEGIN

????? IF (Len(@whereClause)? >0 )

??????? Set @strSQL =' Select Top ' + Str(@pageSize) +?' ' + @primaryKeyField + ',' + @ReturnFieldLists +

????????????????????????????????? 'From ' + @tableName +'where ' + @whereClause + 'order by '+@InnerOrder;

??????ELSE

??????????Set @strSQL ='Select TOP ' + str(@pageSize) + ' '? @primaryKeyField? + ','+ @ReturnFieldLists +

?????????????????????????????????????'From '? + @tableName? + ' order by' +@InnerOrder;

?? END

? ELSE

? BEGIN

????? DECLARE?? @Index? int,

?????????????????????????? @DotIndex?? int,

???????????????????????????@SortFieldTemp?? nvarchar(2000),

?????????????????????????? @strTemp?? nvarchar(200),

?????????????????????????? @strOrder1?? nvarchar(2000)

??????Set @strOrder1 = ''

????? WHILE (1=1)

?????? BEGIN

??????????????SELECT @Index =CHARINDEX (',',@SortFieldLists)

????????????? IF? @Index =0

?????????????? BEGIN

???????????????????? set @sortFieldTemp = @ SortFieldLists;

???????????????????? Select @DotIndex =CHARINDEX (' . ',@SortFieldTemp)

???????????????????? IF @DotIndex >0

????????????????????????? Set @strTemp =' tb1. ' + subString(@SortFieldTemp,@DotIndex +1,Len(@SortFieldTemp) - @DotIndex +1 )

???????????????????? ELSE

???????????????????????? Set @strTemp ='tb1. ' +@SortFieldTemp

?????????????????????Set @strOrder1 =@strOrder1 +','+@strTemp

???????????????????? --退出循环

?????????????????????BREAK;

????????????? END

?????????????ELSE

???????????? BEGIN

???????????????? Set @sortFieldTemp = subString(@sortFieldLists,1,@Index -1)

???????????????? Select @DotIndex =CHARINDEX ('。',@sortFieldTemp)

????????????????IF @DotIndex >0

?????????????????????? Set @strTemp ='tb1. ' + subString(@SortFieldTemp,Len(@sortFieldTemp)-@DotIndex +1)

????????????????ELSE

????????????????????? Set @strTemp ='tb. ' +@SortFieldTemp

?????????????? Set @strOrder1 = @strOrder1 + ',' + @strTemp

?????????????? --截取字符串

????????????? Select @SortFieldLists =subString (@sortFieldLists,@Index + 1,Len(@SortFieldLists) - @Index +1)

???????????? END

?????? END

????? ------截取第一个逗号

????? Select @strOrder1= subString (@strOrder,2,Len(@strOrder1))

?????? ---print @strOrder1

???????--return

????? /*

??????????? Select @Index =CHARINDEX ('。',@sortFieldLists )

????????????Set @Index =IsNull(@Index,0)

??????????? IF @Index >0

???????????????? Set @SortFieldLists =SubString (@SortFieldLists,@Index +1,Len(@SortFieldLists )-@Index +1)

????????????IF (@orderType !=0)

?????????????? Set @strOrder1 =' Order by Tb1. ' +@SortFieldLists + 'DESC ';

??????????? ELSE

?????????????? Set @strOrder1 =' order by Tb1. ' +@SortFieldLists + 'ASC ';

????? */

??? IF (Len(@whereClaus) > 0)

??????????Set @strSQL =' Select TOP ' + Str(@pageSize) + ' Tb1. *

???????????????????????????????????? From? (Select ' + @PrimaryKeyField + ' AS PrimaryKeyColumn,' + @ReturnFieldLists +

??????????????????????????????????????????????????? ' From ' + @TableName +' where ' + @WhereClause +' ) AS Tbl

??????????????????????????????????????????????????????where NOT EXISTS (Select PrimaryKeyColumn

????????????????????????????????????????????????????????????????????????????????????????????????? From???(Select TOP ' + Str(@pageSize * (@pageIndex -1 ) ) + ' ' + @PrimarykeyField + ' AS PrimaryKeyColumn?? From

????????????????????????????????????????????????????????????????????????????????????????????????????????????? ' +? @TableName + '

???????????????????????????????????????????????????????????????????????????????????????????????????????????????? where ' + @WhereClause + ' order By ' + @InnerOrder +

?????????????????????????????????????????????????????????????????????????????????????????????????????????? ' ) AS B

???????????????????????????????????????????????????????????????????????????????????????????????????????????? Where B.PrimaryKeyColumn =Tbl.PrimaryKeyColumn ) Order By '+@strOrder 1

??????ELSE

???????? Set @strSQL = ' Select TOP ' + Str(@pageSize) + ' Tbl.*

???????????????????????????????????????? From (Select? ' + @PrimaryKeyField + ' AS PrimaryKeyColumn,' + @ReturnFieldLists +

???????????????????????????????????????????????????????????????????? ' From ' + @TableName +

????????????????????????????????????????????????????????') AS Tbl

???????????????????????????????????????? Where NOT EXISTS (Select ' + @PrimaryKeyField + ' AS PrimaryKeyColumn

????????????????????????????????????????????????????????????? From ( Select? Top ' + Str(@pageSize * (@pageIndex -1 ) + ' ' + @PrimaryKeyField + ' AS PrimaryKeyColumn?? From ' + @TableName + 'Order by ' + @InnerOrder +

?????????????????????? ') AS B

???????????????????????Where B.PrimaryKeyColumn =Tb1.PrimaryKeyColumn ) Order by ' + @strOrder1

???????? END

----------------------------------------------------------------

? END

? ----print @strSQL;

?--动态执行SQL

? EXECUTE sp_ExecuteSQL @strSQL;

?END

GO

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读