数据海量分页存储过程(1)

USE [ForePress]
GO
/****** 对象:  StoredProcedure [dbo].[usp_DownloadData]    脚本日期: 02/28/2008 19:06:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--分页读取井数据存储过程

ALTER PROCEDURE [dbo].[usp_DownloadData]

@tblName VARCHAR(255), -- 表名
@PageIndex INT = 0 , -- 页码
@strWhere VARCHAR(1000) = '', --查询条件(不要加WHERE)
@strOrder VARCHAR(1000) = '' , --需要排序的列
@strGetFields VARCHAR(1000) = '*', -- 需要返回的列
@PageSize INT = 200 -- 页尺寸

AS

DECLARE @strSQL VARCHAR(5000) -- 主语句

BEGIN
IF @PageIndex = 0 --若查询第一页,使用以下语句
 BEGIN
   IF @strOrder != ''
   BEGIN
    IF @strWhere != ''
     SET @strSQL = 'SELECT TOP ' + STR(@PageSize) +' ' + @strGetFields
      + ' FROM [' + @tblName + '] ' + ' WHERE ' + @strWhere
      + ' ORDER BY ' + @strOrder
    ELSE
     SET @strSQL = 'SELECT TOP ' + STR(@PageSize) +' ' + @strGetFields
      + 'FROM [' + @tblName + '] ORDER BY ' + @strOrder  
   END
  ELSE
   BEGIN
    IF @strWhere != ''
     SET @strSQL = 'SELECT ' +' ' + @strGetFields
      + ' FROM [' + @tblName + '] ' + 'WHERE ' + @strWhere
    ELSE
     SET @strSQL = 'SELECT ' + @strGetFields + ' FROM [' + @tblName + '] '
      
   END
 END
ELSE --处理非第一页的SQL语句
 BEGIN
   IF @strOrder != ''
   BEGIN
    IF @strWhere != ''
     SET @strSQL = 'SELECT TOP ' + STR(@PageSize) +' ' + @strGetFields
      + ' FROM [' + @tblName + '] '
      + ' WHERE ' + @strOrder + ' > ' + '( SELECT MAX('+ @strOrder
      + ') FROM  ( SELECT TOP ' + STR(@PageIndex*@PageSize)+ ' '
      + @strOrder + ' FROM [' + @tblName + '] WHERE ' + @strWhere
      + ' ORDER BY ' + @strOrder + ') AS T ) ORDER BY ' + @strOrder
      
    ELSE
     SET @strSQL = ' SELECT TOP ' + STR(@PageSize) +' ' + @strGetFields
      + ' FROM [' + @tblName + '] WHERE ' + @strOrder + ' > '
      + '(SELECT MAX( ' + @strOrder + ' ) FROM ( SELECT TOP ' + STR(@PageIndex*@PageSize)
      +  @strOrder + ' FROM [ ' + @tblName + '] ' + 'ORDER BY ' + @strOrder
      + ') AS T )' + 'ORDER BY ' + @strOrder
   END
  ELSE
   BEGIN
    IF @strWhere != ''
     SET @strSQL = 'SELECT ' +' ' + @strGetFields
      + ' FROM [' + @tblName + '] ' + ' WHERE ' + @strWhere
    ELSE
     SET @strSQL = 'SELECT ' +' ' + @strGetFields
      + ' FROM [' + @tblName + '] '
   END


 END
END

EXEC (@strSQL)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值