Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как ограничить SELECT выборкой от N до М записей по порядку? (+)
|
|||
|---|---|---|---|
|
#18+
Вопрос не спроста, т.к. во всей документации нет ничего толкового Необходимо разбить результат запроса на стринцы. Естественно, что тянуть весь результат запроса - 100.000 записей, ради 10 записей не рационально! Отсюда вопрос можно ли ограничить выборку не по полям таблицы, а по ПОРЯДКУ СЛЕДОВАНИЯ записи в результате. В MySQL есть для этого конструкция для SELECT - LIMIT N,M тоесть выбирать начиная с N, М записей результата запроса. Здесь же ничего кроме TOP и SET ROWCOUNT нет. Посоветуйте плиз, что нить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2002, 15:10 |
|
||
|
Как ограничить SELECT выборкой от N до М записей по порядку? (+)
|
|||
|---|---|---|---|
|
#18+
Select * from ( Select top ( M - N ) * from ( Select top M ... from ... order by ... ) as View1 order by ... desc ) as View2 order by ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2002, 01:25 |
|
||
|
Как ограничить SELECT выборкой от N до М записей по порядку? (+)
|
|||
|---|---|---|---|
|
#18+
Здесь такое уже обсуждалось где-то... Советовали declare @Start int select top N @Start = id from table1 order by id select top K * from table1 where id >=@Start order by id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2002, 13:26 |
|
||
|
Как ограничить SELECT выборкой от N до М записей по порядку? (+)
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2002, 13:40 |
|
||
|
Как ограничить SELECT выборкой от N до М записей по порядку? (+)
|
|||
|---|---|---|---|
|
#18+
paging на SQL делается так : declare @Page int =1,(номер страници) @RecsPerPage int = 10 (сколько записей на странице , @FirstRec int, @LastRec int SELECT @FirstRec = (@Page - 1) * @RecsPerPage SELECT @LastRec = (@Page * @RecsPerPage + 1) --создаем temp table c ID int IDENTITY CREATE TABLE [dbo].#Temp_search1 ( ID int IDENTITY , [rank] [int], ID] [int] IDENTITY (1, 1) NOT NULL , [varchar] (300) и так далее < на sql 2000 можно использовать type table для переменной) insert into #Temp_search1 select все что вам нужно SELECT *, MoreRecords = ( SELECT COUNT(*) FROM #Temp_search1 TI WHERE TI.ID >= @LastRec ) FROM #Temp_search1 WHERE ID > @FirstRec AND ID < @LastRec все передаете @Page и @RecsPerPage как параметры из вашего приложения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2002, 02:28 |
|
||
|
Как ограничить SELECT выборкой от N до М записей по порядку? (+)
|
|||
|---|---|---|---|
|
#18+
2 Olga Решения с таким количеством ошибок я уже давно не встречал К тому же, что будет если оператор <insert into #Temp_search1 select все что вам нужно> вернет очень много записей, а страниц Вы просмотрите после этого всего несколько? Зачем в этом случае все эти данные писать во временную таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2002, 07:34 |
|
||
|
Как ограничить SELECT выборкой от N до М записей по порядку? (+)
|
|||
|---|---|---|---|
|
#18+
o kakix konkretno oshibkax vi izvolite govorit" ? y menia eto rabotaet na 100 % , eto reshenie vi moshete podrobno prochitat" zdec" http://www.4guysfromrolla.com/webtech/062899-1.shtml kstati moshete ckopirovat" polnost'y store procedure ecli y vac ne polychaetcia napicat" ee camomy vcego xoroshego ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2002, 14:12 |
|
||
|
Как ограничить SELECT выборкой от N до М записей по порядку? (+)
|
|||
|---|---|---|---|
|
#18+
Olga, Вас никто не хотел обидеть, но я привык полагать, что код, в начале которого стоит столь утверждающий коментарий "paging на SQL делается так :" должен работать сразу же, после операций <Copy> и <Paste>. Пойдем по порядку. > declare > @Page int =1,(номер страници) Вы уверены, что такой синтаксис коректен для SQL Server? Деректива Declare не допускает инициализацию переменных. Это не значение параметра по умолчанию для процедуры. DECLARE {{ @local_variable data_type } | { @cursor_variable_name CURSOR } | { table_type_definition } } [ ,...n] > --создаем temp table c ID int IDENTITY > CREATE TABLE [dbo].#Temp_search1 > ( ID int IDENTITY , ^^^^^^^^^^^^^^^^^^^^^ > [rank] [int], > ID] [int] IDENTITY (1, 1) NOT NULL , ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > [varchar] (300) и так далее < на sql 2000 можно использовать type table > для переменной) Какая-то из выделенных строк явно лишняя, так как невозможно создать таблицу с двумя полями identity. Если смотреть дальше на код, то лишняя вторая строка, так как на первую присутствует ссылка. IDENTITY Indicates that the new column is an identity column. When a new row is added to the table, Microsoft® SQL Server™ provides a unique, incremental value for the column. Identity columns are commonly used in conjunction with PRIMARY KEY constraints to serve as the unique row identifier for the table. The IDENTITY property can be assigned to tinyint, smallint, int, bigint, decimal(p,0), or numeric(p,0) columns. Only one identity column can be created per table. Bound defaults and DEFAULT constraints cannot be used with an identity column. You must specify both the seed and increment or neither. If neither is specified, the default is (1,1). Про комментарии, скобки и запятые я просто промолчу. > y menia eto rabotaet na 100 % , eto reshenie vi moshete podrobno prochitat" zdec" Почитал. Ну так и Вы перечитайте, заодно сравните Ваш код с кодом по ссылке. Если вы хотели продемонстрировать идею, было бы проще сразу указать эту ссылку. > kstati moshete ckopirovat" polnost'y store procedure ecli y vac ne polychaetcia napicat" ee camomy Спасибо. Ну, и мне не очень нравится идея с вставкой всего результата поиска во временную таблицу, так как в общем случае это может быть довольно большой объем и несколько пользователей смогут запросто положить сервер. Но, так как это напрямую зависит от задачи и ее реализации, то мое мнение тут не более чем imho. PS: ничего личного. Без обид? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2002, 08:12 |
|
||
|
Как ограничить SELECT выборкой от N до М записей по порядку? (+)
|
|||
|---|---|---|---|
|
#18+
В конструкции select top N @Start = id from table1 order by id вместо N не могу использовать переменную (MSSQL2000) Но судя по вышеприведенным листингам это должно работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2002, 10:26 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3510&tid=1824121]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
| others: | 255ms |
| total: | 391ms |

| 0 / 0 |
