+ -
当前位置:首页 → 问答吧 → sybase IQ 分页

sybase IQ 分页

时间:2010-11-12

来源:互联网

有人写过sybase iq 分页的过程吗,IQ 数据量比较大,用什么处理比较好?

作者: wangdonsy   发布时间: 2010-11-12

IQ中分页是个比较纠结的事情

作者: andkylee   发布时间: 2010-11-12

本帖最后由 wangdonsy 于 2010-11-12 17:05 编辑

不借助临时表或新建表,能不能在原表操作?
IQ 里面 ALTER TABLE 不能对临时表操作,新建表数据大,效率有问题
本论坛的一位兄弟写的
  1. Please see the below sp I wrote:

  2. CREATE PROCEDURE GetDataByPage(
  3. @SqlStr         varchar(8000),
  4. @PageSize       int,
  5. @CurrentPage    int)
  6. AS
  7. DECLARE @FirstRec int, @LastRec int,@dt varchar(10)
  8. BEGIN

  9.   SELECT @FirstRec = (@CurrentPage - 1) * @PageSize
  10.   SELECT @LastRec = (@CurrentPage * @PageSize + 1)

  11.   SELECT @dt= substring(convert(varchar,rand()),3,10)
  12.   
  13.   SELECT @SqlStr = stuff(@SqlStr,charindex(' FROM ',upper(@SqlStr)),6,' INTO tempdb..Paging'+@dt+' FROM ')
  14.   EXECUTE (@SqlStr)

  15.   SELECT @SqlStr = 'ALTER TABLE tempdb..Paging'+@dt+' ADD RID numeric(10) IDENTITY PRIMARY KEY'
  16.   EXECUTE (@SqlStr)
  17.   
  18.   SELECT @SqlStr = 'SELECT Count(*) From tempdb..Paging'+@dt
  19.   EXECUTE (@SqlStr)
  20.   
  21.   SELECT @SqlStr = 'SELECT * FROM tempdb..Paging'+@dt+' WHERE RID >; '+convert(varchar,@FirstRec)+' and RID < '+convert(varchar,@LastRec)
  22.   EXECUTE (@SqlStr)
  23.   
  24.   SELECT @SqlStr = 'DROP TABLE tempdb..Paging'+@dt
  25.   EXECUTE (@SqlStr)
  26.   
  27. END


  28. some comments:
  29. 1.@SqlStr     varchar(8000), depends on your page size
  30. 2. this is a generic paging sp, if you just want to use it for specific table, you'd better change the 'tempdb..Paging' to #Paging, the performance will be better
复制代码

作者: wangdonsy   发布时间: 2010-11-12