powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отбор записей начиная с определенного номера, и заканчивая другим
17 сообщений из 17, страница 1 из 1
Отбор записей начиная с определенного номера, и заканчивая другим
    #32011808
Иван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача такая:
Пусть есть таблица, состоящая из 2-х полей. 1-е - строка, второе - datetime. Задача написать процедуру, которая бы отбирала записи начиная с номера i и заканчмвая номером k (i и k - параметры хр-й процедуры).
Я смог сделать это только с помощью временной таблицы, но есть подозрение, что в SQL-server'е могут быть какие-нибудь функции, которые помогают сделать это.
...
Рейтинг: 0 / 0
Отбор записей начиная с определенного номера, и заканчивая другим
    #32011809
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А чем between плох?
select * from YourTable where field between i and k
Все равно записи по какому-то критерию выбираются, ну хотя бы по строке.
select top k * from YourTable where [Строковое поле] > или < строки
или Вам просто в некотором диапазоне нужно? Но зачем?
...
Рейтинг: 0 / 0
Отбор записей начиная с определенного номера, и заканчивая другим
    #32011810
Иван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может я чего-то не понимаю, но что вы предлагаете поставить вместо слова field ?
...
Рейтинг: 0 / 0
Отбор записей начиная с определенного номера, и заканчивая другим
    #32011811
Иван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще, select top @k не работает, там можно только число поставить.
Зачем - другой вопрос.
...
Рейтинг: 0 / 0
Отбор записей начиная с определенного номера, и заканчивая другим
    #32011813
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да кое чего Вы не поняли. Ну это не беда.
Вместо field можно имя Вашего поля вставить, если у Вас в этой таблице кроме тех двух полей что Вы указали, ID есть.
Насчет того что select top @k не работает это я знаю, но ведь можно exec('select top ' + cast(@k, varchar(10)) + '...').
Я Вам конечно не полностью решение выдал, т.к. Вы вроде на самый главный вопрос не ответили. По критерию записи выбираем или в произвольном диапазоне?
...
Рейтинг: 0 / 0
Отбор записей начиная с определенного номера, и заканчивая другим
    #32011814
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.
>select top @k не работает, там можно только число поставить

SET @@ROWCOUNT @k
SELECT .... FROM ...


2.
>записи начиная с номера i и заканчмвая номером k
А что вы самим поразумеваете по словами "номер записи", если у вас нет для этого поля ? Физическое расположение записи в таблице ?
Расположение этой же записи в результате выполнения простого SELECT-a ?
Расположение этой же записи в результате выполнения SELECT-a с опцией ORDER BY?
...
Рейтинг: 0 / 0
Отбор записей начиная с определенного номера, и заканчивая другим
    #32011822
Иван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне это нужно было для поиска по форуму, и id записи тут был бы ни к чему.
В результате получается нечто вроде этого:
declare @i int
declare @k int
set @i=100
set @k=200
declare @ss varchar(10),@ss1 varchar(10)
set @ss = cast((@k - @i) as varchar(10))
set @ss1 = cast(@k as varchar(10))
exec('select * from (select top '+@ss+' msg.* from (select top '+@ss1+' * from _msg order by date) msg order by msg.date desc) m order by m.date')
...
Рейтинг: 0 / 0
Отбор записей начиная с определенного номера, и заканчивая другим
    #32011824
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Иван
1. А зачем передавать 2 параметра?
2. не понимаю как может помочь в поиске по форуму запрос на выборку определенного количества записей?
...
Рейтинг: 0 / 0
Отбор записей начиная с определенного номера, и заканчивая другим
    #32011827
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно вам нужно организовать постраничный вывод результатов запроса на стороне клиента (например, по 100 записей на одной странице) ?
...
Рейтинг: 0 / 0
Отбор записей начиная с определенного номера, и заканчивая другим
    #32011938
Иван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё верно. Нужен просто постраничный вывод (настраиваемый) результатов поиска. Хотелось написать это покорректней, но, похоже решение (выше), будет очень тормозным.
...
Рейтинг: 0 / 0
Отбор записей начиная с определенного номера, и заканчивая другим
    #32011939
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Иван
Посмотрите на десток тем ниже тему "Как получать запрос порционно"
...
Рейтинг: 0 / 0
Отбор записей начиная с определенного номера, и заканчивая другим
    #32011942
Alexander Chepack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Смешной вопрос - а что такое номер строки? Т.е. SQL2K, например, вообще не гарантирует что
select всегда в одном и том же порядке записи возращать будет.
...
Рейтинг: 0 / 0
Отбор записей начиная с определенного номера, и заканчивая другим
    #32011943
Иван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Alexander Chepack:
В таблице 2 поля - строка и datetime. Сортировка по datetime.
Genady:
Ваше решение - временная таблица, мой вопрос - как сделать это без временной таблицы.

Такой вопрос. Например, я пишу поисковый сервер по интернету. В результате поиска найдены миллионы записей, естественно расставленные по какому-то приоритету. Задача разбить результаты поиска по страницам. Здесь я вижу несколько решений:
1. Результаты поиска во врем таблицу, дальше понятно.
2. Забирать рекордсет целиком, и обрабатывать его АСП'ом или чем-то еще
3. Тот код, который я привел в середине.

Интересно, какие решения используются в реальной жизни, и какое из этих 3-х быстрее, затрачивает меньше памяти и проч.
...
Рейтинг: 0 / 0
Отбор записей начиная с определенного номера, и заканчивая другим
    #32011944
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Ваше решение - временная таблица, мой вопрос - как сделать это без временной таблицы.

Почему? Не всегда вариант с временной таблицей медленные, чем с подзапросом.

>2. Забирать рекордсет целиком, и обрабатывать его АСП'ом или чем-то еще
Рекордсет с милионом записей? Хм... Ну попробуйте.


>3. Тот код, который я привел в середине.
А Вы его проверяли? Что то мне кажется, что он будет возвращять всегда один и тот же рекордсет


P.S. Постраничный вывод данных здесь уже много раз обсуждался, поробуйте поискать.
...
Рейтинг: 0 / 0
Отбор записей начиная с определенного номера, и заканчивая другим
    #32011952
Иван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Genady:
То есть вы считаете, что временная таблица всё-же оптимальный выход ?
Код я проверял. Для того, чтобы он не возвращал всё время один и тот же рекордсет надо присваиватьразные значения переменным i и k
Вопрос закрыт. всем спасибо.
...
Рейтинг: 0 / 0
Отбор записей начиная с определенного номера, и заканчивая другим
    #32011953
Иван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Genady:
То есть вы считаете, что временная таблица всё-же оптимальный выход ?
Код я проверял. Для того, чтобы он не возвращал всё время один и тот же рекордсет надо присваивать разные значения переменным i и k
Вопрос закрыт. всем спасибо.
...
Рейтинг: 0 / 0
Отбор записей начиная с определенного номера, и заканчивая другим
    #32011964
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Для того, чтобы он не возвращал всё время один и тот же рекордсет надо присваивать разные значения переменным i и k

Ну рекордсет то может и разный, но не факт что постранично
это проверяли?
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отбор записей начиная с определенного номера, и заканчивая другим
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]