SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Hstar
-- Create date: 2012年6月24日12:23:08
-- Description: 通用分页存储过程
-- Update:2012年8月25日16:26:12(删除了SQL08的语法,让SQL05可用)
-- =============================================
ALTER PROCEDURE [dbo].[Hstar_Paging]
@tblName varchar(100), --表名
@fldName varchar(255),--主键字段
@PageSize INT =20,--分页大小
@PageIndex int,--第几页
@Columns varchar(1000) = '*',--需要得到的字段
@OrderType bit = 0,--排序的类型 (0为升序,1为降序)
@strWhere varchar(1000) = '',--查询条件, 不用加where关键字
@sortColumn varchar(100) = ''--排序的字段名 (即 order by column asc/desc)
AS
DECLARE @sortTemp varchar(300),@sql varchar(2000)
SET @sortTemp=''
--步骤1、判断是否需要派排序
IF @sortColumn<>''
BEGIN
IF @orderType=0
BEGIN
SET @sortTemp=' order by '+@sortColumn+' asc'
END
ELSE
BEGIN
SET @sortTemp=' order by '+@sortColumn+' desc'
END
END
--步骤二、判断是否是首页,首页直接查询
IF @PageIndex=1--第一页
BEGIN
SET @sql='SELECT top '+str(@PageSize)+' '+@Columns+' from '+@tblName+' where '+@strWhere+@sortTemp
END
--步骤三、其他页的查询方法,基于row_number方式
ELSE
BEGIN
SET @sql='SELECT '+@Columns+' FROM (SELECT no= row_number() OVER '
IF @sortTemp=''
BEGIN
SET @sql=@sql+'(order by '+@fldName+')'
END
ELSE
BEGIN
SET @sql=@sql+'('+@sortTemp+')'
END
SET @sql=@sql+',* FROM '+@tblName+' WHERE '+@strWhere+' )AS tt where tt.no between '+str(@pageSize*(@PageIndex-1)+1)+' and '+str(@PageSize*@PageIndex)
END
exec(@sql)
比较简陋,在此记录下,有空再修改下。