Форум программистов, компьютерный форум, киберфорум
Наши страницы
Базы данных
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.60
Maksim
#1

Подскажите, как сделать хранимую процедуру в MS SQL для постраничного вывода? - Базы данных

13.08.2007, 14:37. Просмотров 4106. Ответов 30
Метки нет (Все метки)

Есть следующие мысли:
Если можно сделать запрос, который добавит еще одно поле, проиндексированное от 0 до количества записей, я смогу решить задачу...
Возможно ли сделать такой запрос?
А может есть другие способы решения?
В Oracle вроде можно получить номер строки в запросе... А в MS SQL?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2007, 14:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Подскажите, как сделать хранимую процедуру в MS SQL для постраничного вывода? (Базы данных):

Подскажите как сделать скрипт на php для My sql
меня такая проблема, нужен скрипт на пхп который бы показывал все записи в...

Как создать хранимую процедуру в IDS Informix
как создать хранимую процедуру в IDS Informix?

Передача рисунка в хранимую процедуру
Есть таблица (SQL 200) CREATE TABLE . ( IDENTITY PRIMARY KEY NOT NULL,...

Передача данных из клиента VB 6.0 в хранимую процедуру MS SQL Server 7.0 (+++)
В проге VB есть переменная Price as Currency Надо в хронимую процедуру на MS...

Не могу использовать в MS SQL Server хранимую процедуру, где запрос длиннее 4000 символов
Объявляю строку запроса как nvarchar(4000)... Может есть какой способ обойти...

Создать хранимую процедуру для вычисляемого поля
есть 2-е таблицы Pervoe_vzveshivanie и Vtoroi_Ves. нужно найти сумму этих двух...

30
Maksim
16.08.2007, 14:09 #21
Nu ravenstvo obespechit' netrudno...
Po povodu vtorogo...
Kak tak, vernetsya pervym?
Ya formiruyu stroku zaprosa set exec @sqlstring= 'SELECT.... UNION... WHERE...', potom vyzyvayu

exec sp_executesql @sqlstring
GO

Kak opredelyaetsya poryadok vyvoda v dannom sluchae?
AndreP
0 / 0 / 1
Регистрация: 22.07.2007
Сообщений: 260
16.08.2007, 14:42 #22
Можешь попробовать экспериментально. Но порядок не регламентирован. У меня второй SELECT появляется первым в VB
0
AiK
16.08.2007, 16:32 #23
Немного уточнений:
порядок выдачи любого не упорядоченного селекта - произволен.
Другое дело, если в таблице есть CLUSTERED индекс, то резултаты выборки будут упорядочены по этому индексу.

Как известно, любой UNION заствляет сервер создавать рабочую таблицу, в таблице никаких clustered индексов не строится, поэтому порядок выдачи результатов может быть абсолютно не предсказуем.

Поэтому в UNION _обычно_ юзают order by.
Если резалтсеты нужно получить в определённом порядке, то иногда добавляют колонку с номером резалтсета и сначала сортируют по этой колонке, а потом по всем остальным.
Astor
16.08.2007, 17:32 #24
Я использую Stored Procedure, которая все выбранные записи (сложный Select из множества таблиц со многими Join) помещает во временную таблицу, у которой есть поле int identity.

А потом из этой таблицы делаю Select где задаю диапазон значений из поля identity.

Я не могу сказать что это красивое и быстрое решение, но оно работает и во всяком случае не гоняет лишние данные между SQL сервером и IIS, который все это визуализирует.
Maksim
16.08.2007, 19:39 #25
UNION и правда, никак не сортируется... Накакой закономерности не обнаружил...
У меня он по счастливой случайности попадал в начало...
Moжет делать
SELECT *, O AS pppppp FROM....
UNION
SELECT *, 1 AS pppppp FROM...
А потом сортировать по этому столбцу...
Опять временные таблицы... Дурдом....
Maksim
16.08.2007, 19:47 #26
Короче, вот что родилось:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DECLARE @temp_table TABLE (name VARCHAR(50), pageN INT, pageSize INT, id_num INT IDENTITY(0,1))
-------------------------------------------
DECLARE @page_size INT
DECLARE @page_number INT
SET @page_size = 10
SET @page_number = 67
------------------------------------------- 
DECLARE @rowmin INT 
DECLARE @rowmax INT 
DECLARE @counter INT
SET @rowmax = @page_number*@page_size
SET @rowmin = (@page_number-1)*@page_size
INSERT INTO @temp_table SELECT COUNT(*), @page_number, @page_size FROM utilizadores 
INSERT INTO @temp_table SELECT nome, NULL, NULL FROM utilizadores
-- Страница --
SELECT * FROM @temp_table WHERE id_num = 0 OR (id_num > @rowmin AND id_num < = @rowmax)
В первой строке приходят данные о общем числе записей, номер страницы, размер её...
Затем наша страница...

Осталось то, о чем я говорил, ловить изменения базы во время пролистывания...
Существуют ли какие-то 'timestamps' для таблиц? Как это выловить? Для записей нашел в Books Onlain, а для таблиц целиком?

А может есть возможность хранить мою временную таблицу в течении всего сеанса пролистывания? Наверное нельзя...

Идей много, но получается очень все грубо и увесисто...
AndreP
0 / 0 / 1
Регистрация: 22.07.2007
Сообщений: 260
17.08.2007, 11:24 #27
Стандартных способов для этого я не знаю. Единственное, что приходит в голову это отлавливать изменения в тригере на задействованные таблицы и инициализировать некую запись в специальной таблице. При выводе пользователю данных проверять необходимость перезапроса на основании этой записи.
0
vintik
17.08.2007, 18:19 #28
Бродил я как то по www.activeserverpages.ru
и там в форуме нашёл такоё

http://www.activeserverpages.ru/foru...2&Showsub=7300
--------------
Выводит записи с m по n. Придумано не мной, читай
SQL Magazine www.sqlmag.com

SQL
1
2
3
4
5
SELECT * FROM
(SELECT top m * FROM
(SELECT top n * FROM my_table ORDER BY column_name) AS t1
ORDER BY column_name DESC) AS t2
ORDER BY column_name
Вроде это то что тебе надо,
без всяких времменных таблиц
и данные всегда 'свежие'
sa
19.08.2007, 01:21 #29
Капиталисты тоже на эту тему думают:
http://www.15seconds.com/issue/010607.htm
Maksim
19.08.2007, 11:26 #30
Ya toje u kapitalistov rabotayu....
Maksim
19.08.2007, 16:07 #31
По поводу
SQL
1
2
3
4
5
SELECT * FROM
(SELECT top m * FROM
(SELECT top n * FROM my_table ORDER BY column_name) AS t1
ORDER BY column_name DESC) AS t2
ORDER BY column_name
Все хорошо, но надо иметь уверенность, что COLLUMN_NAME заполнен уникальными значениями...
У меня таких столбцов не было...
19.08.2007, 16:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2007, 16:07
Привет! Вот еще темы с решениями:

Нужен пример на JS для постраничного вывода запросов из БД Microsoft SQL Server 2000.
Люди, помогиет мне. Я уже просто устал. Нужен пример на JS для постраничного...

PHP + MS SQL. Как передать параметры в хранимую процедуру?
Как передать из PHP значения параметров для хранимой процедуры в MS SQL Server...

Как сделать хранимую процедуру?
Составить хранимую процедуру для реализации факта аренды яхты и отображения...

Код для постраничного вывода результатов поиска как у поисковиков. Что не так?
Есть код, который выбирает из базы значения в соответствии с запросом и выводит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru