首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Sybase >

sybase查询分页的有关问题

2012-03-20 
sybase查询分页的问题请教一个问题:我有个一个查询用到union的,同时还有orderby排序现在要改成分页查询请

sybase查询分页的问题
请教一个问题:
我有个一个查询用到union的,同时还有order   by排序
现在要改成分页查询
请问怎么做   ?我用sybase的是   15.2版本的。
谢谢!

[解决办法]
你最好是写一个存储过程,用top可以很好的解决这个问题,你可以看一下我下面的代码。
create procedure pagination
@tblName varchar(255) --table name
@strGetFields varchar(1000) --return the fields
@fldName varchar(255) --sort of the field
@pageSize int
@pageIndex int
@doCount int --return the count of the note
@orderType int /*设置排序的类型,非0值降序*/
@strCond varchar(1500) /* 查询条件*/

as

declare @strSQL varchar(5000) --主要的SQL语句
declare @strTmp varchar(110) --临时变量
declare @strOrder varchar(400) --排序的类型

select @doCount = count(*) from info --get the count of the note

if @doCount != 0
begin
if @strCond != " "
set @strSQL = "select count(*) as Total from " + @tblName + "where " + @strCond
else
set @strSQL = "select count(*) as Total from " + @tblName + " "
end

else
begin
if @orderType != 0
begin
set @strTmp = "> (select min "
set @strOrder = "order by " + @fldName + " desc "
end
else
begin
set @strTmp = " <(select max "
set @strOrder = "order by " + @fldName + " asc "
end

if @pageIndex = 1
begin
if @strCond != " "
set @strSQL = "select top " + str(@pageSize) + " " + @strGetFields + "from " + @tblName + "where " + @strCond + " " + @strOrder
else
set @strSQL = "select top " + str(@pageSize) + " " + @strGetFields + "from " + @tblName + @strOrder
end

else

begin
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

if @strCond != " "

set @strSQL = "select top " + str(@pageSize) + " " + @strGetFields + "from " + @tblName + "where " + @fldName + " " + @strTmp + "( "+ @fldName + ") from (select top " + str((@pageIndex-1) * @pageSize) + " " + @fldName + "from " + @tblName + "where " + @strCond + " "+ @strOrder + ") as tblTmp) and " + @strCond + " " + @strOrder
end
end
exec(@strSQL)
go
现在一般的代码都是这样,你可以参考一下

热点排行