zoukankan      html  css  js  c++  java
  • SQL 分页通用存储过程

    USE [DB]
    GO
    /****** Object:  StoredProcedure [dbo].[SP_AspNetPager]    Script Date: 10/23/2015 16:37:33 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    
    ALTER PROCEDURE [dbo].[SP_AspNetPager]
        @PageSize INT = 10 , -- 页尺寸
        @PageIndex INT = 1 , -- 页码
        @TableName VARCHAR(255) , -- 表名 
        @KeyFields VARCHAR(255) = '' , -- 排序的字段名
        @ShowFields VARCHAR(1000) = '*' , -- 需要返回的列
        @OrderType BIT = 0 , -- 设置排序类型, 非 0 值则降序
        @WhereString VARCHAR(1500) = '', -- 查询条件 (注意: 不要加 where)
        @OrderFields VARCHAR(1000)='',      --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC
        @RecordCount int OUTPUT             --总页数
    AS 
        DECLARE @StrSQL VARCHAR(5000)       -- 主语句
        DECLARE @StrTmp VARCHAR(110)        -- 临时变量
        DECLARE @StrOrder VARCHAR(400)        -- 排序类型
    
        IF @RecordCount IS NULL
        BEGIN
            DECLARE @sql nvarchar(4000)
            SET @sql=N'SELECT @RecordCount=COUNT(*)'
                +N' FROM '+@TableName
                +N' WHERE '+@WhereString
            EXEC sp_executesql @sql,N'@RecordCount int OUTPUT',@RecordCount OUTPUT
        end
        
        --以上代码的意思是如果@DoCount传递过来的不是0,就执行总数统计。以下的所有代码都是@DoCount为0的情况
        IF @OrderType != 0 
        BEGIN
            SET @StrTmp = '<(select min'
            SET @StrOrder = ' order by [' + @KeyFields + '] desc'
            --如果@OrderType不是0,就执行降序,这句很重要!
        END
        ELSE 
        BEGIN
            SET @StrTmp = '>(select max'
            SET @StrOrder = ' order by [' + @KeyFields + '] asc'
        END
        IF @PageIndex = 1 
        BEGIN
            IF @WhereString != '' 
                SET @StrSQL = 'select top ' + STR(@PageSize) + ' '
                    + @ShowFields + '  from [' + @TableName
                    + '] where ' + @WhereString + ' ' + @StrOrder
            ELSE 
                SET @StrSQL = 'select top ' + STR(@PageSize) + ' '
                    + @ShowFields + '  from [' + @TableName + '] '
                    + @StrOrder
            --如果是第一页就执行以上代码,这样会加快执行速度
        END
        ELSE 
        BEGIN
            --以下代码赋予了@StrSQL以真正执行的SQL代码
            SET @StrSQL = 'select top ' + STR(@PageSize) + ' '
                + @ShowFields + '  from [' + @TableName + '] where ['
                + @KeyFields + ']' + @StrTmp + '([' + @KeyFields
                + ']) from (select top ' + STR(( @PageIndex - 1 )
                                               * @PageSize) + ' ['
                + @KeyFields + '] from [' + @TableName + ']' + @StrOrder
                + ') as tblTmp)' + @StrOrder
            IF @WhereString != '' 
                SET @StrSQL = 'select top ' + STR(@PageSize) + ' '
                    + @ShowFields + '  from [' + @TableName
                    + '] where [' + @KeyFields + ']' + @StrTmp + '(['
                    + @KeyFields + ']) from (select top '
                    + STR(( @PageIndex - 1 ) * @PageSize) + ' ['
                    + @KeyFields + '] from [' + @TableName + '] where '
                    + @WhereString + ' ' + @StrOrder
                    + ') as tblTmp) and ' + @WhereString + ' '
                    + @StrOrder
        END 
        EXEC (@StrSQL)
  • 相关阅读:
    050医疗项目-模块五:权限设置-第三方系统的接入
    049医疗项目-模块五:权限设置
    047医疗项目-模块四:采购单模块—采购单审核提交(Dao,Service,Action三层)
    046医疗项目-模块四:采购单模块—采购单审核(Dao,Service,Action三层)
    Netty原理分析
    Java集群优化——使用Dubbo对单一应用服务化改造
    知乎问答:现在程序员的工资是不是被高估了?
    一文理解 Java NIO 核心组件
    深入理解 Spring 事务原理
    完美主义对程序员的影响
  • 原文地址:https://www.cnblogs.com/rwh871212/p/4904993.html
Copyright © 2011-2022 走看看