SQL Server 适用于一般分页的存储过程

USE YourDBName
GO

/****** Object:  StoredProcedure [dbo].[ApPaginationCommon]    Script Date: 02/17/2012 21:32:41 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

/*
 功能描述: 通用分页显示查询,返回2个表数据,第一个为记录总行数
 如果有自增标识字段,在@strGetFields中不要加入此字段信息,
 如果非要加入的话,要 (fldName + 0) AS fldName 这样处理;
 输入参数:
 @tblName: 表名
 @strGetFields: 需要返回的列 '*':返回所以列信息
 @PageSize: 页尺寸
 @PageIndex: 页码
 @doCount: 返回记录总数, 非 0 值则返回
 @strOrderBy: 排序字段信息,(注意: 不要加 ORDER BY)
 格式: Field1 DESC, Field2 ASC
 @strWhere: 查询条件,(注意: 不要加 WHERE)
 修改者: Onion
 创建时间: 2012-02-17
 更改纪录:	
 */

CREATE PROCEDURE [dbo].[ApPaginationCommon]
(
	@tblName varchar(255),
	@strGetFields varchar(1000) = '*',
	@strWhere varchar(1500) = '',
	@strOrderBy varchar(500) = '',
	@PageSize int = 10,
	@PageIndex int = 1
)

AS

-- 主语句

 DECLARE @strSQL varchar(5000) SET @strSQL = ''
 DECLARE @RecordCount int
 -- 排序变量
DECLARE @strOrder varchar(400) SET @strOrder = ''
SET @RecordCount = 0
 --如果@doCount传递过来的不是0,就执行总数统计
 DECLARE @sWhere varchar(2000)
 SET @sWhere = ''
 IF (@strWhere != '')
 SET @sWhere = ' WHERE ' + @strWhere

SET @strSQL='SELECT COUNT(*) AS Total FROM [' + @tblName + '] ' + @sWhere
 EXEC (@strSQL)

 --排序字段信息
 IF (@strOrderBy != '')
 SET @strOrder = ' ORDER BY ' + @strOrderBy

 --如果是第一页就执行以上代码,这样会加快执行速度

 IF (@PageIndex = 1)

 BEGIN

 IF (@strWhere != '')

 SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + ' FROM [' + @tblName + '] WHERE ' + @strWhere + @strOrder

 ELSE

 SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + ' FROM ['+ @tblName + '] '+ @strOrder

 END

 ELSE

 BEGIN

 --为搜索表建立自动编号 保存到临时表中

 SET @strSQL = 'SELECT TOP ' + str(@PageIndex*@PageSize) + ' IDENTITY(int,1,1) AS IID, ' + @strGetFields + ' INTO #tmpTable FROM [' + @tblName + ']'
 IF (@strWhere != '')
 SET @strSQL = @strSQL + ' WHERE ' + @strWhere + @strOrder
 ELSE
 SET @strSQL = @strSQL + @strOrder
 --以下代码赋予了@strSQL以真正执行的SQL代码
 SET @strSQL = @strSQL + ' SELECT ' + @strGetFields + ' FROM #tmpTable WHERE IID > ' + str((@PageIndex-1)*@PageSize) + ' DROP TABLE #tmpTable'
 END

 --PRINT @strSQL



 --执行分页查询

 EXEC (@strSQL)



GO


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值