|
Часть запроса
|
|||
---|---|---|---|
#18+
Добрый день! А не подскажут ли уважаемые отцы, как в SQL Server 7.0 получить в результирующем наборе часть строк? Например, я передаю хранимой процедуре одними из параметров - "вернуть строки с 20 по 30" (причем сначала ищутся все записи, удовлетворяющие другим критериям поиска)? Проблема в следующем - делаю базу с автопереводом слов на разные языки. Выборка двух с половиной тысяч записей занимает 3-4 секунды. Есть таблицы: "клиенты", "анкеты", "фразы", "имена клиентов". Для таблиц "клиенты", "анкеты" и "имена клиентов" уникальный OwnerID (ID клиента). В таблице "фразы" содержатся фразы, на которые ссылаются поля в таблице "анкеты". Структура таблицы "фразы": PhrazeID - идентификатор LangID - ID языка Phraze - собственно фраза. Так как таблица "анкеты" объемная, то даже при JOIN'е таблицы "фразы" запрос тормозит. Поэтому хотелось бы подставлять значения только в те строки результирующего набора, которые попадают в выбранный промежуток... Извините, если все запутано. Для примера кусок кода, перед которым собственно и надо установить обрабатываемый промежуток: --далее вставляем фразы на запрошенном языке (цвет глаз, цвет волос, натура, имя клиента, название страны) UPDATE #Results SET Eyecolor= cl.Phraze FROM #Results JOIN Phrases cl on cl.PhraseID=#Results.EyeID AND cl.LangID=@LangID UPDATE #Results SET Haircolor= cl.Phraze FROM #Results JOIN Phrases cl on cl.PhraseID=#Results.HairID AND cl.LangID=@LangID UPDATE #Results SET Nature= cl.Phraze FROM #Results JOIN Phrases cl on cl.PhraseID=#Results.YNat AND cl.LangID=@LangID UPDATE #Results SET Zodiac= cl.Phraze FROM #Results JOIN Phrases cl on cl.PhraseID=#Results.Zod AND cl.LangID=@LangID С удовольствием поделюсь с отцами показами RLE за неоценимую помощь... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2001, 10:40 |
|
Часть запроса
|
|||
---|---|---|---|
#18+
У SQL Server есть только оператор TOP например select TOP 10 * from table1 order by 1 возвращает первые 10 записей Но не понятно зачем это в данном случае может быть тебе просто переписать UPDATE UPDATE #Results SET Eyecolor= cl.Phraze FROM Phrases cl WHERE cl.PhraseID=#Results.EyeID AND cl.LangID=@LangID AND #Results.id>=10 AND #Results.id<=20 Если в #Results нет id, то проведи операцию в два этапа создав промежуточную таблицу с id ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2001, 12:29 |
|
Часть запроса
|
|||
---|---|---|---|
#18+
Спасибо всем, уже разобрался... И работает все влет, и процедуте можно передавать параметры, с какой по какую строки обработать полностью, а какие игнорировать... И без SELECT TOP ! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2001, 18:10 |
|
Часть запроса
|
|||
---|---|---|---|
#18+
А вы реализовали это так как ArtP предлагал? Александр. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2001, 19:08 |
|
Часть запроса
|
|||
---|---|---|---|
#18+
Вкратце о реализации: поскольку нужда в полностью заполненных полях - грубо говоря, текущая запрошенная страница их n записей (самая критичная по времени процедура в моем случае) лежит в узком диапазоне, делаем следующее: Выбираем все нужные записи, удовлетворяющие условиям отбора, из таблиц (это быстро, поскольку в таблице "Анкеты" только числовые индексы-ссылки на фразы из таблицы "Фразы"). Далее нумеруем все записи таблицы от 1 до "кол-во записей" (для этого завел отдельное поле). А уже потом выбранный промежуток обрабатываем полностью (вставляем фразы на нужном языке и пр). В итоге получился выигрыш в скорости исполнения порядка 4-5 раз визуально... Диапазон обрабатываемых записей передается в процедуру в качестве параметров, что очень удобно - в ASP-скрипте поменяли константу количества записей на странице и все! Остальное не наша проблема... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2001, 13:23 |
|
|
start [/forum/topic.php?fid=46&fpage=3587&tid=1827206]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 150ms |
0 / 0 |