|
|
Posted on
2007-07-05 23:51
成斌
阅读( 112)
评论()
收藏
举报
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 /**//**//**//************************************************
分页存储过程
创建日期:2007-7-5
修改日期:2007-7-10
创建人:成斌
************************************************/
CREATE PROCEDURE [dbo].[sp_paging]
--定义全局变量
@tablename varchar(50), --表名
@pagesize int = 30, --每页行数
@page int = 1, --页码
@listfield varchar(100) = '*', --列出字段(结果中列出的字段)
@fieldname varchar(100) = 'id', --查询字段(用哪个字段查询)
@condition varchar(800) = '', --查询条件(不包含where)
@searchtype int = 0, --查询类型(0-查询行数,1-查询内容)
@orderby bit = 0, --排序(0-顺序,1-倒序)
@searchtime datetime='' OUTPUT --查询时间
AS
BEGIN
set @searchtime = getdate() --计时开始
--定义局部变量
declare
@sql nvarchar(4000),
@where1 varchar(800),
@where2 varchar(800),
@temp1 varchar(800),
@temp2 varchar(800)

--判断是否有查询条件--
if @condition = ''
begin --没有查询条件
set @where1 = ' where '
set @where2 = ''
end
else
begin --有查询条件
set @where1 = ' where ( ' + @condition + ' ) and '
set @where2 = ' where ( ' + @condition + ' ) '
end
--判断查询类型--
if @searchtype = 0 --如果类型为0则查询行数,否则查询内容
begin
set @sql = ' select count(*) as ''Page Count'' from ' + @tablename + ' with (nolock) ' + @where2 --计算总行数
end
else
begin
--判断顺序--
if @orderby = 0
begin
set @temp1 = ' > (select max( '
set @temp2 = ''
end
else
begin
set @temp1 = ' < (select min( '
set @temp2 = ' desc '
end
--判断输入页码--
if @page = 1 --如果页码等于1
begin
set @sql = ' select top ' + cast(@pagesize as varchar) + @listfield + '
from ' + @tablename + ' with (nolock) ' + @where2 + ' order by ' + @fieldname + @temp2
end
else --如果是其他页码
begin
set @sql = ' select top ' + cast(@pagesize as varchar) + @listfield + '
from ' + @tablename + ' with (nolock) ' + @where1 + ' ( ' + @fieldname + @temp1 + @fieldname + ' )
from (select top ' + cast(@pagesize * (@page - 1) as varchar) + @fieldname + '
from ' + @tablename + ' with (nolock) ' + @where2 + ' order by ' + @fieldname + @temp2 + ' ) as T)) order by ' + @fieldname + @temp2
end
end
exec(@sql) --执行SQL
select datediff(ms,@searchtime,getdate()) as 'Use Time' --计时结束
END
|