sql分页存取过程代码(降序)

  采用的是sql分页中效率高的双top方法,采用存储过程,速度比较快,代码有简单的注释,我就不多解释了。

为了减少使用时的代码,我把全部搜索和有条件搜索的分开了。下面的是按升序排列的代码。

注意必须要用select top后面不能之间加变量,所以先连成字符串动态执行。

[CODE=mysql]
————-降序排列—无条件
CREATE procedure Pr_GetArticles —-这里为存储过程名称
@page int ,
@pagenum int
AS
DECLARE @tablename nvarchar(20)
set @tablename=’Article’ —–表名
DECLARE @idname nvarchar(20)
set @idname=’Article_Id’ —–表ID名
declare @strSQL nvarchar(4000)
DECLARE @TopNum int
SET @TopNum=(@page-1)*@pagenum
set @strSQL=N’select top’+ STR(@pagenum)+’ *
FROM ‘+@tablename+’
WHERE ‘+@idname+’<
(
select ISNULL(MIN(‘+@idname+’),99999999)
FROM
(
select TOP ‘+STR( @TopNum)+’ ‘+@idname+’ from ‘+@tablename+’ order by ‘+@idname+’ desc
) A
)
order by ‘+@idname+’ desc’
print (@strSQL)
exec(@strSQL)
GO

————-降序排列—有条件
CREATE procedure Pr_GetArticles —-这里为存储过程名称
@page int , —–传入的页码
@pagenum int —–每页的大小
AS
DECLARE @tablename nvarchar(20)
set @tablename=’Article’ —–表名
DECLARE @idname nvarchar(20)
set @idname=’Article_Id’ —–表ID名
DECLARE @condition nvarchar(3000)
set @condition=’Article_State=”已审核”‘ —–这里写条件
declare @strSQL nvarchar(4000)
DECLARE @TopNum int
SET @TopNum=(@page-1)*@pagenum
set @strSQL=N’select top’+ STR(@pagenum)+’ *
FROM ‘+@tablename+’
WHERE ‘+@idname+’<
(
select ISNULL(MIN(‘+@idname+’),99999999)
FROM
(
select TOP ‘+STR( @TopNum)+’ ‘+@idname+’ from ‘+@tablename+’ where ‘+@condition+’ order by ‘+@idname+’ desc
) A
) and ‘+ @condition +’
order by ‘+@idname+’ desc’
print (@strSQL)
exec(@strSQL)
GO
[/CODE]

 

1 评论

  1. 朋友你会把ACCESS转换成SQL server吗sql2000?

    Hector 于 2009-8-13 20:36:10 回复

    还没有试过,你在企业管理器–数据库—导入数据–选择access数据源,那里应该可以

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据