zoukankan      html  css  js  c++  java
  • ASP.NET中的分页剖析(五)

    现在把基于SQL语句的分页使用存储过程实现,实现代码如下:

    两种方案:

    USE [MyBookShop]
    GO
    /****** 对象:  StoredProcedure [dbo].[usp_ShowPage]    脚本日期: 09/15/2010 17:49:11 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:        sms
    -- Create date: 2010.9.12
    -- Description:    分页,用到了ROW_NUMBER() 
    -- =============================================
    CREATE PROCEDURE [dbo].[usp_ShowPage]
        -- Add the parameters for the stored procedure here
        @tblName   varchar(255),       -- 表名 
        @strGetFields varchar(1000) = '*', -- 需要返回的列,默认* 
        @strOrder varchar(255)='',      -- 排序的字段名,必填 
        @strOrderType varchar(10)='ASC', -- 排序的方式,默认ASC 
        @PageSize   int = 10,          -- 页尺寸,默认10 
        @PageIndex int = 1,           -- 页码,默认1 
        @strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where) 
    AS
    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;

        -- Insert statements for procedure here
        declare @strSQL varchar(5000) 
     
        if @strWhere !='' 
            set @strWhere=' where '+@strWhere 
     
        set @strSQL= 
            'SELECT * FROM ('+ 
            'SELECT ROW_NUMBER() OVER (ORDER BY '+@strOrder+' '+@strOrderType+') AS pos,'+@strGetFields+' '+ 
            'FROM ['+@tblName+'] '+@strWhere+ 
            ') AS sp WHERE pos BETWEEN '+str((@PageIndex-1)*@PageSize+1)+' AND '+str(@PageIndex*@PageSize)
        exec (@strSQL)
    END

    另一种写法:

    USE [MyBookShop]
    GO
    /****** 对象:  StoredProcedure [dbo].[usp_SelectByPage]    脚本日期: 09/15/2010 17:50:14 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:        sms
    -- Create date: 2010.9.12
    -- Description:    从MyBookShop数据库中的Books表中选择数据 
    --              传入选择的页数,每页显示数固定为5条 
    -- =============================================
    CREATE PROCEDURE [dbo].[usp_SelectRecordByPage]
        @page int, -- 要选择第X页的数据
        @pageSize int=10  -- 每页显示数,默认为10条 
    AS 
    BEGIN 
        declare @sql nvarchar(1000) 
        set @sql='select top '+convert(varchar(10),@pageSize)+' * from Books where id not in 
         (select top '+convert(varchar(20),(@page-1)*@pageSize)+' id from Books order by id) order by id' 
        exec (@sql)
    END

    关于ASP.NET分页先写到这里......

  • 相关阅读:
    How Many Tables 并查集(求有几个集合)
    Spell checker 字典树&&普通查找(加计数)
    昂贵的聘礼 dijstra算法(要枚举源点)
    All in All 找子串 水题
    Ultra-QuickSort 求逆序对 归并排序
    Snowflake Snow Snowflakes 根据相似度排序,有点暴力
    Gold Balanced Lineup hash函数,第一次接触,借鉴了大神的博客思想,看了很久才看懂,弱菜啦
    Stockbroker Grapevine 裸的floyd算法,求最大中的最小
    Check the difficulty of problems 概率dp,概率知识很重要
    [leetcode] Valid Anagram 、 Find All Anagrams in a String
  • 原文地址:https://www.cnblogs.com/phone/p/1827324.html
Copyright © 2011-2022 走看看