SqlServer分页存储过程(二)

2015-01-25 19:30:34 · 作者: · 浏览: 9
ndition +' order by '+ @fldSort +' '+ @strSortType+') AS TBMaxID)' +' '+ @strCondition+' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType end end ------返回查询结果----- exec sp_executesql @strTmp --print @strTmp SET NOCOUNT OFF GO
怎么在 数据库中测试呢?

declare @pageCount int 
declare @Counts int 
exec [dbo].[proc_ListPageInt] 'sysobjects', '* ', 20,1,@pageCount output,@Counts output,'id', 0,'','id',0
print @pageCount --这个可有可无 
print @Counts --这个可有可无 

执行效果如下:

\

\

分页存储过程二:

USE [JianKunKingTestDatabase001] 
GO 

/****** Object: StoredProcedure [dbo].[A_P_HelpPageShow] Script Date: 01/21/2015 19:19:42 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 


ALTER PROCEDURE [dbo].[A_P_HelpPageShow] 
( 
@tblName nvarchar(max), -- 表名 
@strGetFields varchar(1000) = '*', -- 需要返回的列 
@fldName varchar(255)='', -- 排序的字段名 
@PageSize int = 10, -- 页尺寸 
@PageIndex int = 1, -- 页码 
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序 
@strWhere varchar(1500) = '', -- 查询条件 (注意: 不要加 where) 
@Counts int = 0 output --查询到的记录数 
) 
AS 
declare @strSQL nvarchar(4000) -- 主语句 
declare @strTmp nvarchar(110) -- 临时变量 
declare @strOrder nvarchar(400) -- 排序类型 
declare @totalRecord int --查询到的记录数 
declare @SqlCounts nvarchar(max) ----对总数查询进行SQL构造 
--计算总记录数 
begin 
if @strWhere !='' 
set @SqlCounts = 'select @totalRecord=count(*) from ' + @tblName + ' where '+@strWhere
else 
set @SqlCounts = 'select @totalRecord=count(*) from ' + @tblName + '' 
end 

--print @strWhere 
--print @SqlCounts 
exec sp_executesql @SqlCounts,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数 
set @Counts=@totalRecord 

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 
--print @strOrder 
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 
--以下代码赋予了@strSQL以真正执行的SQL代码 
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' 
+ @tblName + ' where ' + @fldName + ' ' + @strTmp + '('+ @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '+ @fldName + ' from ' + @tblName + ' ' + @strOrder + ') as tblTmp)'+ @strOrder 
--print @strSQL 
if @strWhere != '' 
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' 
+ @tblName + ' where ' + @fldName + ' ' + @strTmp + '(' 
+ @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' ' 
+ @fldName + ' from ' + @tblName + ' where ' + @strWhere + ' ' 
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder 
end 
end 
--print @strSQL 
exec sp_executesql @strSQL 
GO 

怎么在数据库中测试呢?

select count(*) from sysobjects ;
declare @CountsAA int 
exec [dbo].[A_P_HelpPageShow] 'sysobjects', '* ', 'id ',20, 1,1, ' ',@CountsAA output 
print @CountsAA --这个可有可无

执行结果如下:

\