zoukankan      html  css  js  c++  java
  • 分页SQL 和Oracle 存储过程


    CREATE PROCEDURE [dbo].[sp_GetPagingList](
    @Table nvarchar(1000),          --表名
    @Field nvarchar(1000) = '*',        --读取字段
    @Where  nvarchar(500) = NULL,       --Where条件
    @GroupBy nvarchar(500) = NULL,      --分组
    @OrderBy nvarchar(500),       --排序字段必须
    @PageNumber int = 1,            --开始页码
    @PageSize int = 10,             --页大小
    @IsCount bit = 0            --是否返回记录总数
    )
    AS
    BEGIN
    ------------------------------------------------------------------------------------------------
    DECLARE @strWhere nvarchar(500)                     --Where 条件
    IF @Where IS NOT NULL AND @Where != ''              --Where 条件
    BEGIN
    SET @strWhere = ' WHERE ' + @Where + ' '
    END
    ELSE
    BEGIN
    SET @strWhere = ''
    END
    ----------------------------------------------------------------------------------------------------
    DECLARE @strGroupBy nvarchar(500)                   --GroupBy 条件
    IF @GroupBy IS NOT NULL AND @GroupBy != ''          --GroupBy 条件
    BEGIN
    SET @strGroupBy = ' GROUP BY ' + @GroupBy + ' '
    END
    ELSE
    BEGIN
    SET @strGroupBy = ''
    END
    ----------------------------------------------------------------------------------------------------
    DECLARE @strOrderBy nvarchar(500)                   --OrderBy 条件

    SET @strOrderBy = ' ORDER BY ' + @OrderBy

    ----------------------------------------------------------------------------------------------------
    DECLARE @strSql nvarchar(max)   --Sql 语句

    ----------------------------------------------------------------------------------------------------
    IF @PageNumber < 1                                  --第一页提高性能
    BEGIN   
    SET @PageNumber = 1
    END

    IF @PageNumber = 1                          
    BEGIN
    SET @strSql = 'SELECT TOP ' + str(@PageSize) +  ' ' + @Field + ' FROM ' + @Table + 
       @strWhere + @strGroupBy + @strOrderBy
    EXEC sp_executesql @strSql
    END 
    ----------------------------------------------------------------------------------------------------
    --根据 SqlServer 2005 帮助得到下面的语句 
    ELSE
    BEGIN 
    DECLARE @STARTID nvarchar(50)
    DECLARE @ENDID nvarchar(50)
    SET @STARTID = convert(nvarchar(50),(@PageNumber - 1) * @PageSize + 1)
    SET @ENDID = convert(nvarchar(50),@PageNumber * @PageSize)
    SET @strSql = 'WITH MYTABLE AS (SELECT ROW_NUMBER() OVER (' + @strOrderBy + ')
       AS RowNumber,' + @Field + ' FROM '+ @Table +  @strWhere + @strGroupBy + ') 
       SELECT * FROM MYTABLE 
       WHERE RowNumber BETWEEN ' + @STARTID + ' AND ' + @ENDID

      --oracle 分页语句语法。
      -- select * from (select A.* ,ROWNUM RN from(select * from tb_test)A where ROWNUM<=@ENDID)where RN >=@STARTID
    EXEC sp_executesql @strSql
    END
    --------------------------------------------------------------------------------------------------
    --计算总行数
    IF @IsCount = 1
    BEGIN
    SET @strSql= 'SELECT  Count (*) AS RecordCount FROM ' + @Table + @strWhere + @strGroupBy
    EXEC sp_executesql @strSql   
    END 
    RETURN
    END
    return

  • 相关阅读:
    SDN大作业
    个人作业——软件工程实践总结作业
    2019 SDN上机第7次作业
    2019 SDN上机第6次作业
    SDN课程阅读作业(2)
    个人作业——软件评测
    2019 SDN上机第5次作业
    2019 SDN上机第4次作业
    SDN阅读作业
    ThinkPHP3.2.2中开启REWRITE模式
  • 原文地址:https://www.cnblogs.com/xiaogelove/p/2342801.html
Copyright © 2011-2022 走看看