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
现在一般的代码都是这样,你可以参考一下