Разбиение запроса на страници

NetMinion
Дата: 15.01.2001 16:53:09
как сделать чтонить вроде:
Select TOP 25 FROM Table
SELECT NEXT 25 FROM Table
итд
(данные нельзя сортировать по ID)
Тоесть разбить запрос на страници для размещ. в инете.... (ASP)

Помогите ПЛЗ)
SergSuper
Дата: 15.01.2001 16:54:55
http://www.sql.ru/cgi-bin/UltraBoard/UltraBoard.pl?Action=ShowPost&Board=mssql&Post=347&Idle=365&Sort=0&Order=Descend&Page=0&Session=
DRY_GIN
Дата: 19.01.2001 18:05:08
tipa takogo :
Rs. eto tvoi record set
...
rs.Open SomeQuery,SomeConnection,3
...
rs.PageSize = 25
rs.AbsolutePage = SomePageNumber
...
i vpered
( eche est' rs.PageCount)
DRY_GIN
Дата: 19.01.2001 18:18:12
ya zabyl glavnoe, sorry
intCount=1
....
do while not rs.Eof and not rs.Bof and intCount<=25
...
intCount=intCount+1
...
loop
NetMinion
Дата: 20.01.2001 01:28:37
ага, а если полученно 100.000 строк?
рекордсет как будет работать?)
и что быстрее ограничить выбор при выборке или потом обрабатывать информацию?)))
AlxR
Дата: 22.01.2001 04:45:26
У меня такая же проблема. Сделал следующим образом:

1. Сначала запрос выполняешь целиком. (Плюсы - узнаешь количество возвращенных записей.)
2. Создаешь "временную" таблицу. "Временную" - не в понятиях SQL сервера и еще какой базы, а, например, для каждой активной сессии, т.е. создаешь ее сам. (я так понял, приложение для Web )В этой таблице добавляешь поле IDENTITY, т.е. теперь каждая запись получается пронумерованной.
3. Запихиваешь результат запроса в эту "временную" таблицу.
4. Теперь, когда пользователь захотел получить, например, 30-тую страницу, делаешь запрос к "временной" таблице, используя BETWEEN, где в его параметрах задаешь "размер" выводимой страницы.

Это вкратце. На практике нужно смотреть еще на некоторые вещи.
1. Если, например, количество возвращенных записей меньше определенного числа, то выгоднее не запихивать результат во "временную " таблицу, а каждый раз выполнять полный запрос и ограничивать разбивку на страницы уже на уровне приложения.
2. Если у запроса меняется только порядок сортировки, адресовать его "временной" таблице.
3. Вовремя удалаять эти самые "временные" таблицы.
Вот, вроде вкратце все )) Удачи!
VICTOR
Дата: 22.01.2001 10:27:08
Может такой код заинтересует кого-нибудь.
Declare @i int
Select @i= 0
drop table #t
Select top 18 *,'n'=0,'лист'=0 into #t from m_cenn
update #t Set @i=n=@i+1
update #t Set лист=Round((n-1)/10,0)+1
select лист,n,nm from #t where лист=2
VICTOR
Дата: 22.01.2001 10:30:45
Может такой код заинтересует кого-нибудь.
Declare @i int
Select @i= 0
drop table #t
--Это запрос в таблицу
Select top 18 *,'n'=0,'лист'=0 into #t from m_cenn
update #t Set @i=n=@i+1
update #t Set лист=Round((n-1)/10,0)+1
В приложении пользуемся только таблицей #t
select лист,n,nm from #t where лист=2