zoukankan      html  css  js  c++  java
  • 从通用分页存储过程[ROWCOUNT方式]抽出适合自己需求的分页过程

         通用分页存储过程很实用,但毕竟不是全适用于一些环境,譬如我遇到过一种情况,需要先外链两个表,然后再关联几个表,总之参数传递很烦人,这里不细说了,现在只谈实现查询后,怎么分页的简单技巧
    1,建立用户函数
    CREATE   function   F_xxxx(@ID  nvarchar(36),@Key nvarchar(36),......)
    {
    ......//这里查询出你需要分页的所有数据,可以带参数来查询
    }
    建函数的目的是为了整合查询的数据,主要是可以带入参数,很方便.
    注,函数中没有exec语句,不可以拼接SQL,不过可以调用存储过程.
    2,建分页存储过程,具体框架和说明如下
    /*080520  by zjyaoo@live.cn*/  
    CREATE PROCEDURE dbo.SPCustomPaging
        (
        
    @PageSize int =15--页面大小
        @PageNumber int =1--页码
        @传入到函数的参数1 nvarchar(36), --传入到函数的参数,这里参数个数根据建的函数来决定
        @传入到函数的参数2 nvarchar(36), --传入到函数的参数,这里参数个数根据建的函数来决定
        @StrWhere nvarchar(2000)=' AND 1=1' , --条件,注:传入的@StrWhere需要replace.(''','''')处理
        @RecordCount int =0  output  --返回总的条数
        )
    AS
    DECLARE @strStartRow int
    IF @PageNumber < 1
        
    SET @PageNumber = 1
    SET @strStartRow =(@PageNumber - 1)* @PageSize + 1  --设置其实页码
    --
    --
    DECLARE @str_Count_SQL nvarchar(500
    SET @str_Count_SQL= 'SELECT @TotalCount=count(*) FROM  [F_建立的的函数]('''+@函数参数1+''','''+@函数参数2+''') Where 1=1 '  + @StrWhere  --1=1,用于外接条件
    EXEC sp_executesql @str_Count_SQL,N'@TotalCount int=0 output',@RecordCount output  --获取总的条数
    Declare @Sql nvarchar(1000)
    set @Sql =
    'DECLARE  @SortColumn  nvarchar(255)  --建几个临时变量
    DECLARE  @SortNullValue  nvarchar(255) 
    DECLARE  @PKStartValue  nvarchar(255)  
    SET @SortNullValue = CAST(
    '''' as int)
    SET ROWCOUNT  
    '+  cast(@strStartRow   as  nvarchar(5))  +'   --整数转为字符
    SELECT @SortColumn= isNull([函数中的分类字段] ,@SortNullValue), @PKStartValue = [函数中的关键字段]    FROM   [F_建立的的函数](
    '''+@函数参数1+''','''+@函数参数2+''')   Where 1=1   '+@StrWhere +'  ORDER BY [函数中的分类字段], [再加个函数中的关键字段] Desc 
    SET ROWCOUNT   
    '+ cast(@PageSize   as  nvarchar(5)) +'    --整数转为字符
    SELECT * FROM  F_ManufacturerDiscount(
    '''+@OrgID+'''
     WHERE  (isNull([函数中的分类字段],@SortNullValue)>@SortColumn or (isNull([函数中的分类字段],@SortNullValue)=@SortColumn and [函数中的关键字段]<=@PKStartValue))  
    '+@StrWhere +'  ORDER BY [函数中的分类字段],[函数中的关键字段] Desc
    RETURN
    '
    Exec (@Sql)
    GO
  • 相关阅读:
    selenium防止检测,修改chromedriver.exe
    ElasticSearch笔记脚本(script)
    Newtonsoft助手类
    js单元测试,使用断言捕获抛出的异常
    解决homebrew的权限问题
    匹配驼峰命名、蛇形命名的正则表达式
    supertest测试,expect不同的状态码,但都能通过
    如何退出/关闭telnet终端
    解决子模块的合并冲突
    解决终端无法访问github.com 的错误
  • 原文地址:https://www.cnblogs.com/zjy/p/1203589.html
Copyright © 2011-2022 走看看