实现SQL分页的存储过程代码

 更新时间:2015年08月04日 10:05:03   作者:彭亚欧  
本文主要介绍了分页的存储过程所实现代码,使用存储过程可以提高效率与节约时间,需要的朋友可以参考下

SQL分页的存储过程代码,需要的朋友们直接拿去用,使用非常简单。

分享代码如下

USE [SendMessage]
GO
/****** Object: StoredProcedure [dbo].[pages]  Script Date: 07/09/2015 13:46:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[pages]
(
@tbname   nvarchar(100),        --要分页显示的表名
@FieldKey  nvarchar(1000),   --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
@PageCurrent int=1,        --要显示的页码
@PageSize  int=10,        --每页的大小(记录数)
@FieldShow nvarchar(1000)='',   --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
@FieldOrder nvarchar(1000)='',   --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC
@WhereString  nvarchar(1000)=N''   --查询条件
)
AS
begin
 
IF ISNULL(@FieldKey,N'')=''
BEGIN
  RAISERROR(N'分页处理需要主键(或者惟一键)',1,16)
  RETURN
END
 
IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1
 
IF ISNULL(@PageSize,0)<1 SET @PageSize=10
 
IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'
 
IF ISNULL(@FieldOrder,N'')=N''
  SET @FieldOrder=N''
ELSE
  SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)
 
IF ISNULL(@WhereString,N'')=N''
  SET @WhereString=N''
ELSE
  SET @WhereString=N'WHERE '+@WhereString+N''
 
--计算分页显示的TOPN值
DECLARE @TopN varchar(20),@StartRecord varchar(20),@EndRecord varchar(20)
SELECT @TopN=@PageSize,
  @StartRecord=(@PageCurrent-1)*@PageSize+1,
  @EndRecord=(@PageCurrent-1)*@PageSize+@PageSize
 
--第一页直接显示
IF @PageCurrent=1
  EXEC(N'SELECT TOP '+@TopN
    +N' '+@FieldShow
    +N' FROM '+@tbname
    +N' '+@WhereString
    +N' '+@FieldOrder)
ELSE
EXEC(N'with temptbl as(
select ROW_NUMBER() Over('+@FieldOrder+') as row, '+@FieldKey+' from '+@tbname+N' '+@WhereString+')
select '+@FieldShow+' from (select B.* from (select '+@FieldKey+' from temptbl where row between '+@StartRecord+' and '+@EndRecord+')A left join '+@tbname+' B on A.'+@FieldKey+'=B.'+@FieldKey+')C')
 
END

以上就是本文的全部内容,希望对大家的学习有所帮助。

相关文章

  • 教你如何看懂SQL Server查询计划

    教你如何看懂SQL Server查询计划

    本文只谈优化查询时如何看懂SQL Server查询计划。毕竟我对SQL Server的认识有限,如有错误,也恳请您在发现后及时批评指正。 当然如果能对大家有所帮助,也不枉我写这么多文字了
    2014-08-08
  • SQL Server触发器及触发器中的事务学习

    SQL Server触发器及触发器中的事务学习

    首先, 说下我写篇文章的目的,我希望能把我对触发器的理解,分享出来与你一起学习
    2011-05-05
  • SQL SERVER偏移函数(LAG、LEAD、FIRST_VALUE、LAST _VALUE、NTH_VALUE)

    SQL SERVER偏移函数(LAG、LEAD、FIRST_VALUE、LAST _VALUE、NT

    本文主要介绍了SQL SERVER偏移函数(LAG、LEAD、FIRST_VALUE、LAST _VALUE、NTH_VALUE),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • SQL 复合查询条件(AND,OR,NOT)对NULL值的处理方法

    SQL 复合查询条件(AND,OR,NOT)对NULL值的处理方法

    在SQL的3值逻辑下,一个查询条件可以产生以下三种情况:TRUE,FALSE,NULL。只有那些满足WHERE子句的值是TRUE的记录才出现在结果表中。
    2011-04-04
  • sql server使用公用表表达式CTE通过递归方式编写通用函数自动生成连续数字和日期

    sql server使用公用表表达式CTE通过递归方式编写通用函数自动生成连续数字和日期

    CTE是在内存中准备好数据,而不是每次一条往返服务器和客户端一次。如果需要再插入到临时表的话就是全部数据一次性插入。 这篇文章主要介绍了sql server使用公用表表达式CTE通过递归方式编写通用函数自动生成连续数字和日期 ,需要的朋友可以参考下
    2019-07-07
  • Sql Server里删除数据表中重复记录的例子

    Sql Server里删除数据表中重复记录的例子

    这篇文章主要介绍了Sql Server里删除数据表中重复记录的例子,本文给出了3种操作方法,需要的朋友可以参考下
    2014-08-08
  • SQL 嵌套查询的具体使用

    SQL 嵌套查询的具体使用

    本文主要介绍了SQL 嵌套查询的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Sql Server 压缩数据库日志文件的方法

    Sql Server 压缩数据库日志文件的方法

    Sql Server 日志 _log.ldf文件太大,数据库文件有500g,日志文件也达到了500g,占用磁盘空间过大,且可能影响程序性能,需要压缩日志文件,下面小编给大家讲解下Sql Server 压缩数据库日志文件的方法,感兴趣的朋友一起看看吧
    2022-11-11
  • mssql SA帐号的改名和删除

    mssql SA帐号的改名和删除

    众所周知,在M$sql中有个绝对是网络安全中的隐患的帐号sa,系统管理员 (sa),默认情况下,它指派给固定服务器角色 sysadmin,并不能进行更改。这个sa一般情况下是既不可以更改名称,也不可以删除,呵呵,有点鸡肋的味道,弃置可惜,食之无味。装上sql2000之后,感觉怪怪的,放着这个后门在,始终都不放心,担心有一天被人破出密码,那偶的电脑不就完拉。可能你回说设个强壮点的密码,这个办法是可行,可不是长久之记,所谓斩草要除根,要是把sa给删拉就不用担心那些"黑客"暴力破解拉。
    2008-04-04
  • SQLServer Top语句参数化方法

    SQLServer Top语句参数化方法

    在T-Sql中,一般top数据不确定的情况下,都是拼sql,这样无论是效率还是可读性都不好。应该使用下面参数化Top方式
    2009-07-07

最新评论