от
Как сделать страницу результатов в SQL сервер 2005? Я пробовал в SQL Server 2000, но не было никакого надежного способа для этого. Мне теперь интересно, если SQL Server 2005 имеет встроенный способ? Что я имею в виду подкачки, например, если я в списке пользователей свой логин, я хочу уметь возвращать только первые 10 записей, потом следующие 10 записей и так далее. Любая помощь будет высоко ценится.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.

7 Ответы

0 голосов
от
Как сделать страницу результатов в SQL сервер 2005? Я пробовал в SQL Server 2000, но не было никакого надежного способа для этого. Мне теперь интересно, если SQL Server 2005 имеет встроенный способ? Что я имею в виду подкачки, например, если я в списке пользователей свой логин, я хочу уметь возвращать только первые 10 записей, потом следующие 10 записей и так далее. Любая помощь будет высоко ценится.
0 голосов
от
Вы можете использовать функцию
the Row_Number()
. Его используют следующим образом:
SELECT Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
FROM Users
Из которого он будет приносить результирующий набор с полем
RowID
, которое можно использовать в страница между.
SELECT * 
FROM 
    ( SELECT Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
      FROM Users 
    ) As RowResults
WHERE RowID Between 5 AND 10
и т. д.
0 голосов
от
Если вы пытаетесь сделать это в одном заявлении (общее плюс пейджинг). Возможно, вам придется исследовать поддержка SQL Server для раздела п. (оконной функции с точки зрения стандарта ANSI для SQL). В Oracle синтаксис как и в примере выше с помощью функции row_number(), но я также добавил раздел п., Чтобы получить общее количество строк в комплекте с каждой строки, возвращаемой в пейджинга (сумма строк 1,262):
SELECT rn, total_rows, x.OWNER, x.object_name, x.object_type
FROM (SELECT COUNT (*) OVER (PARTITION BY owner) AS TOTAL_ROWS,
         ROW_NUMBER () OVER (ORDER BY 1) AS rn, uo.*
         FROM all_objects uo
         WHERE owner = 'CSEIS') x
WHERE rn BETWEEN 6 AND 10
Обратите внимание, что у меня где владелец = 'CSEIS' и мой раздел на хозяина. Итак, результаты:
RN  TOTAL_ROWS  OWNER   OBJECT_NAME            OBJECT_TYPE
6   1262    CSEIS   CG$BDS_MODIFICATION_TYPES   TRIGGER
7   1262    CSEIS   CG$AUS_MODIFICATION_TYPES   TRIGGER
8   1262    CSEIS   CG$BDR_MODIFICATION_TYPES   TRIGGER
9   1262    CSEIS   CG$ADS_MODIFICATION_TYPES   TRIGGER
10  1262    CSEIS   CG$BIS_LANGUAGES            TRIGGER
0 голосов
от
Принято отвечать за это на самом деле не работа для меня...мне пришлось преодолеть еще один обруч, чтобы заставить его работать. Когда я попытался ответить
SELECT Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
FROM Users
WHERE RowID Between 0 AND 9
это не удалось, жалуясь, что он не знал, что идентификатор rowid был. Мне пришлось обернуть ее в внутренней выбрать такой:
SELECT * 
FROM
    (SELECT
    Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
    FROM Users
    ) innerSelect
WHERE RowID Between 0 AND 9
и потом он работал.
0 голосов
от
Когда мне нужно сделать подкачку, я обычно использовать временную таблицу, а также. Вы можете использовать выходной параметр возвращает общее количество записей. В случае заявления в выбор позволяют сортировать данные по определенным столбцам, без необходимости прибегать к динамического SQL.
0 голосов
от
Я считаю, вам нужно выполнить отдельный запрос для этого unfortionately. Мне удалось достичь этого в моей предыдущей позиции, используя некоторую помощь с этой страницы: Пейджинг в dotnet ограничителя 2.0 Они тоже тянут количества строк отдельно.
0 голосов
от
Вот что я делаю для подкачки: все мои большие запросы, которые должны быть постраничный кодируется как вставки во временную таблицу. Временная таблица содержит поле идентификатора, который будет действовать аналогичным образом в функции row_number (), упомянутых выше. Хранить количество строк во временной таблице в выходной параметр, так что вызывающий код не знает, сколько всего записей есть. Код вызова и указывает, какую страницу он хочет, и сколько строк на странице, которые выбраны из временной таблицы. Отличная вещь об этом состоит в том, что у меня тоже есть ссылка "экспорт", что позволяет получить все строки из отчета возвращается в CSV над каждой сетки в моем приложении. Эту связь использует тот же хранимая процедура: вы просто вернуть содержимое временной таблицы вместо того, чтобы делать логику подкачки. Этот placates пользователям, которые ненавидят подкачки, и хотят видеть все, и хочу разобраться с этим миллионом различных способов.
...