日期:2014-05-17 浏览次数:20700 次
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
------ 海量数据库分页存储过程 ------
--参数列表:
--@tblName -- 表名(必添);
--@pkid --主键
--@strGetFields -- 需要返回的列(默认所有列);
--@fldName -- 排序的字段名(必添);
--@PageSize -- 页尺寸(默认每页10条);
--@PageIndex -- 页码(默认第1页);
--@doCount -- 返回记录总数,非"0"值则返回(用处不大);
--@OrderType -- 设置排序类型,非"0"值则降序(默认正序);
--@strWhere -- 查询条件(警告:不需要加 where);
--调用示例:exec PageShow TEST,ID,"*" order ,20,1,0,1,"name='DF'"
--调用示例:
--exec PageShow
-- @tblName="表名",
-- @pkid="主键",
-- @strGetFields="需要返回的列(默认所有列)",
-- @fldName="排序的字段名",
-- @PageSize=页尺寸(默认每页10条),
-- @PageIndex=页码(默认第1页),
-- @doCount=返回记录总数,非"0"值则返回(用处不大),
-- @OrderType=设置排序类型,非"0"值则降序(默认正序),
-- @strWhere="查询条件(警告:不需要加 where)例如StuSex='男'"
---------------------------------------------------------
ALTER PROCEDURE [dbo].[PageShow]
@doCount int= 0 ,
@tblName varchar(255),
@strWhere varchar(1500) = '',
@pkid varchar(50) = '*',
@strGetFields varchar(1000) = '*',
@fldName varchar(255)='',
@OrderType int = 0,
@PageSize int = 10,
@PageIndex int = 1
AS
declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
begin tran
if @doCount != 0
begin
if @strWhere !=''
begin
set @strSQL = 'select count(['+@pkid+']) as Total from ['+ @tblName +'] where '+@strWhere
end
else
begin
set @strSQL = 'select count(['+@pkid+']) as Total from [' + @tblName + ']'
end
print @Strsql
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
else
begin
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
--如果@OrderType不是0,就执行降序,这句很重要!
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end
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
begi