• SQLSERVER 通用分页存储过程


    调用通用分页存储过程

    ALTER PROCEDURE [dbo].[EnterpriseInfo_By_OrganNo_Page] 
        -- Add the parameters for the stored procedure here
         @OrganNo       NVARCHAR(20) = NULL,  -- 组?织?机?构?编?号?                  
         @RoleID        int,      --id
         @beginDateTime datetime,
         @PageSize       int ,    --每?页?显?示?的?记?录?个?数?
         @pageIndex    int     , ----要?显?示?那?一?页?的?记?录?
         @RecordCount int=0 OUTPUT,      ----查?询?到?的?总?记?录?数?
         @pageCount INT OUTPUT,  ----查?询?结?果?分?页?后?的?总?页?数?
         @strSQL nvarchar(max)='' output
    AS
    BEGIN
        DECLARE @_OrganNo NVARCHAR(20)
        Declare @_strWher   nvarchar(max)
        declare @_UserTime int
    --处?理?SQL查?询?
    IF @OrganNo IS NOT NULL AND @OrganNo <> ''
        SET @_OrganNo = @OrganNo
     
    --企?业?信?息?
    Select o.Name,o.OrganComCode,o.ComRegNo,o.Corporation
    From TDOrgan o
    Where o. OrganNo=@_OrganNo
     
    --企?业?联?系?人?信?息?
    --Select l.Name,l.Phone,l.Mobile,l.Email,l.Address,l.ZipCode
    --From TDGrpLinkMan l
    --Where l.OrganNo=@_OrganNo
    set @_strWher='OrganNo='''+@_OrganNo+''''
    if @RoleID is not null
    begin
      @_strWher=@_strWher+' and RoleID='+CONVERT(nvarchar(50), @RoleID)
    end
    if @beginDateTime is not null
    begin
      @_strWher=@_strWher+' and beginDateTime='''+CONVERT(nvarchar(50), @beginDateTime,23)+''''
    end
    exec commPageList
       @tblName='TDGrpLinkMan',
       @fldName='Name,Phone,Mobile,Email,Address,ZipCode,Fax',
       @pageSize=@PageSize,
       @pageIndex=@pageIndex,
       @fldSort='Name',
       
       @strCondition=@_strWher,   @strGroupBy=null,
       @pageCount=@pageCount OUTPUT,
       @RecordCount=@RecordCount  OUTPUT,
       @UsedTime=@_UserTime OUTPUT,
       @strSql=@strSQL output
    END

    通用分页存储过程

    --参数说明
    -------------------------------------------------------------
    /*
    * @tblName   ----要显示的表或多个表的连接
    * @fldName   ----要查询出的字段列表,*表示全部字段
    * @pageSize   ----每页显示的记录个数
    * @pageIndex  ----要显示那一页的记录
    * @fldSort   ----排序字段列表或条件,如:id desc (多个id desc,dt asc)
    * @strCondition  ----查询条件,不需where
    * @strGroupBy   ----分组条件
    * @pageCount  ----查询结果分页后的总页数
    * @RecordCount  ----查询到的总记录数
    * @UsedTime   ----耗时测试时间差
    * @strSql   ----最后返回的SQL语句
    */
    ALTER PROCEDURE [dbo].[commPageList]
    (
     @tblName NVARCHAR(MAX),
     @fldName NVARCHAR(MAX),
     @pageSize INT,
     @pageIndex INT,
     @fldSort NVARCHAR(MAX),
     @strCondition NVARCHAR(MAX),
     @strGroupBy nvarchar(max),
     @pageCount INT=0 OUTPUT,
     @RecordCount INT OUTPUT,
     @UsedTime INT=0 OUTPUT,
     @strSql nvarchar(max)='' OUTPUT
    )
    AS
     SET NOCOUNT ON
     DECLARE @startRow int, @endRow INT     ----用于存放起始值与结束值
     DECLARE @timediff DATETIME       ----用于存放时间差值
     DECLARE @SqlCounts NVARCHAR(MAX)     ----用于存放总记录数查询语句
     DECLARE @strTmp NVARCHAR(MAX)      ----用于存放查询语句
     DECLARE @strWhere NVARCHAR(MAX)      ----用于存放查询条件
     SELECT @timediff = getdate()      ----设置开始时间
     SET @startRow = (@pageIndex - 1) * @pageSize + 1 ----设置起始值
     SET @endRow = @startRow + @pageSize - 1    ----设置结束值
     ----设置总记录数查询语句----
     IF @strCondition is null or @strCondition='' ----没有设置查询条件
      BEGIN
       SET @SqlCounts = 'SELECT @RecordCount = COUNT(*) FROM ' + @tblName
      END
     ELSE ----有设置查询条件
      BEGIN
       SET @strWhere = ' WHERE ' + @strCondition
       SET @SqlCounts = 'SELECT @RecordCount = COUNT(*) FROM ' + @tblName + @strWhere
      END  
     ----取得查询结果总数量-----
     exec sp_executesql @SqlCounts,N'@RecordCount int out ',@RecordCount out 
     declare @tmpCounts int 
     if @RecordCount = 0 
      set @tmpCounts = 1 
     else 
      set @tmpCounts = @RecordCount 
        ----取得分页总数----
        set @pageCount=(@tmpCounts+@pageSize-1)/@pageSize
     ----开始分页计算并取出相应数据----
     ----SELECT * FROM (SELECT *,ROW_NUMBER() OVER (ORDER BY contnet_keyword_addDate DESC) AS RowNumber FROM Public_content_keyword ) T WHERE T.RowNumber BETWEEN @startRow AND @endRow
      if @strGroupBy is not null and @strGroupBy <>'' ----有设置gruop by条件
           begin
            set @tblName=@tblName + ' group by '+@strGroupBy
           end
        
      
     IF @pageIndex = 1    
      BEGIN
       IF @strCondition is null or @strCondition='' ----没有设置显示条件
        BEGIN
         SET @strTmp = 'SELECT TOP ' + CAST(@pageSize as VARCHAR(max)) + ' ' + @fldName + ' FROM ' + @tblName + ' order by '+ @fldSort
        END
       ELSE ----有设置查询条件
        BEGIN
         SET @strTmp = 'SELECT TOP ' + CAST(@pageSize as VARCHAR(max)) + ' ' + @fldName + ' FROM ' + @tblName + @strWhere +' order by '+ @fldSort
        END
      END
     ELSE
      BEGIN
       IF @strCondition is null or @strCondition='' ----没有设置显示条件
        BEGIN
         --SET @strTmp = 'SELECT ' + @fldName + ' FROM (SELECT ' + @fldName + ',ROW_NUMBER() OVER (ORDER BY ' + @fldSort + ') AS RowNumber FROM '+ @tblName +') T WHERE T.RowNumber BETWEEN ' + CAST(@startRow as VARCHAR(max)) + ' AND ' + CAST(@endRow as VARCHAR(max))
         SET @strTmp = 'SELECT * FROM (SELECT ' + @fldName + ',ROW_NUMBER() OVER (ORDER BY ' + @fldSort + ') AS RowNumber FROM '+ @tblName +') T WHERE T.RowNumber BETWEEN ' + CAST(@startRow as VARCHAR(max)) + ' AND ' + CAST(@endRow as VARCHAR(max))
        END
       ELSE ----有设置查询条件
        BEGIN
         --SET @strTmp = 'SELECT ' + @fldName + ' FROM (SELECT ' + @fldName + ',ROW_NUMBER() OVER (ORDER BY ' + @fldSort + ') AS RowNumber FROM '+ @tblName + @strWhere +') T WHERE T.RowNumber BETWEEN ' + CAST(@startRow as VARCHAR(max)) + ' AND ' + CAST(@endRow as VARCHAR(max))
           SET @strTmp = 'SELECT * FROM (SELECT ' + @fldName + ',ROW_NUMBER() OVER (ORDER BY ' + @fldSort + ') AS RowNumber FROM '+ @tblName + @strWhere +') T WHERE T.RowNumber BETWEEN ' + CAST(@startRow as VARCHAR(max)) + ' AND ' + CAST(@endRow as VARCHAR(max))
    
        END
      END 
    ------返回查询结果-----
    SET @strSql = @strTmp
    EXEC(@strTmp)
    SET @UsedTime = DATEDIFF(ms,@timediff,GETDATE())
    SET NOCOUNT OFF
    
  • 相关阅读:
    android的几种“通知”方式简单实现(Notification&NotificationManager)
    《转》常用的正则表达式
    Http编程(二)使用Apache 的API实现
    http编程(一)使用javaAPI实现
    [随笔] 随笔、随笔
    [Java] 游戏服务器搭建 netty+spring+protobuf
    [C/C++基础--笔试突击] 概述
    [单元测试]Java单元测试,基于Mockito的第一次尝试
    [解决方法] spring-mongo mongodb 2.x 升级到 3.x 配置中出现的一些问题
    [解决方法]log4j的 highlight属性在Eclispe中显示乱码
  • 原文地址:https://www.cnblogs.com/z_lb/p/1872459.html
Copyright © 2020-2023  润新知