开发者社区> 技术小牛人> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

通用分页存储过程(sqlserver)

简介:
+关注继续查看
< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd>

-- 获取指定页的数据
CREATE PROCEDURE spPagination
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@doCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
AS

declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
if @doCount != 0
begin
     if @strWhere !=''
      set @strSQL = "select count(*) as Total from [" + @tblName + "] where "
     else
      set @strSQL = "select count(*) as Total from [" + @tblName + "]"
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况

else
begin
     if @OrderType != 0
      begin
       set @strTmp = "<(select min"
       set @strOrder = " order by [" + @fldName +"] desc"
       --如果@OrderType不是0,就执行降序,这句很重要!
      end
  
     else
      begin
       set @strTmp = ">(select max"
       set @strOrder = " order by [" + @fldName +"] asc"
      end
      if @PageIndex = 1
       begin
        if @strWhere != ''
         set @strSQL = "select top " + str(@PageSize) +" "+ " from [" + @tblName + "] where " + @strWhere + " " + @strOrder
        else
         set @strSQL = "select top " + str(@PageSize) +" "+ " from ["+ @tblName + "] "+ @strOrder
         --如果是第一页就执行以上代码,这样会加快执行速度
       end
      else
       begin
        --以下代码赋予了@strSQL以真正执行的SQL代码
        set @strSQL = "select top " + str(@PageSize) +" "+ " from ["
         + @tblName + "] where [" + @fldName + "]" + @strTmp + "(["+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["+ @fldName + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"+ @strOrder
         if @strWhere != ''
        set @strSQL = "select top " + str(@PageSize) +" "+ " from ["
         + @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
         + @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
         + @fldName + "] from [" + @tblName + "] where " + @strWhere + " "
         + @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder
end
end


exec (@strSQL)
GO

本文转自 netcorner 博客园博客,原文链接:http://www.cnblogs.com/netcorner/archive/2007/06/30/2912349.html  ,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
sqlServer存储过程
1、创建存储过程报错:     'CREATE/ALTER PROCEDURE' 必须是查询批次中的第一个语句。 解决方法: use databaseName 后面要加上一句: GO ...
776 0
SQL Server存储过程
转自:http://www.cnblogs.com/hoojo/archive/2011/07/19/2110862.html Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。 Ø 存储过程的概念     存储过程Proc
1017 0
SQL Server 存储过程
Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。 Ø 存储过程的概念     存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。
715 0
[转]SQL Server 存储过程的分页方案比拼
  1SQL Server 存储过程的分页,这个问题已经讨论过几年了,很多朋友在问我,所以在此发表一下我的观点   2建立表:   3  4CREATE TABLE [TestTable] (   5 [ID] [int] IDENTITY (1, 1) NOT NULL ,   6...
610 0
5723
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载