Есть страничка WEB и стандартная задача, реализовать paging + сортировку + фильтрацию. Как на 2008-ом сиквеле это более грамотно реализуется. Можно ли это реализовать без динамического SQL-я.
Здравствуйте, Tom, Вы писали:
Tom>Всем привет,
Tom>Есть страничка WEB и стандартная задача, реализовать paging + сортировку + фильтрацию. Как на 2008-ом сиквеле это более грамотно реализуется. Можно ли это реализовать без динамического SQL-я.
Tom>Спасибо
paging — см top + ROW_NUMBER
сортировка+ фильтрация — сдается мне, без динамического SQL в общем случае никак.
S>paging — см top + ROW_NUMBER S>сортировка+ фильтрация — сдается мне, без динамического SQL в общем случае никак.
В принципе динамический SQL или нет — это не очень критично.
Критично что бы метаданные возвращались при использовании FMTONLY так как по запросу много чего генерируется.
Народная мудрось
всем все никому ничего(с).
Re[2]: MS SQL 2008 & Paging
От:
Аноним
Дата:
04.05.09 15:52
Оценка:
Здравствуйте, syrompe, Вы писали:
S>paging — см top + ROW_NUMBER S>сортировка+ фильтрация — сдается мне, без динамического SQL в общем случае никак.
DECLARE @PageNum AS INT;
DECLARE @PageSize AS INT;
SET @PageNum = 2;
SET @PageSize = 10;
WITH OrdersRN AS
(
SELECT ROW_NUMBER() OVER(ORDER BY OrderDate, OrderID) AS RowNum
,OrderID
,OrderDate
,CustomerID
,EmployeeID
FROM dbo.Orders
)
SELECT *
FROM OrdersRN
WHERE RowNum BETWEEN (@PageNum - 1) * @PageSize + 1
AND @PageNum * @PageSize
ORDER BY OrderDate,OrderID;
Недавно появилась проблема. Заметил, что чем больше в Orders данных, тем тормознее начинает работать запрос. Что, само по себе и не удивительно (тело CTE перелапачивает свю таблицу). Так как же тогда рекомендуют ведущие собаководы?
Здравствуйте, <Аноним>, Вы писали: А>Недавно появилась проблема. Заметил, что чем больше в Orders данных, тем тормознее начинает работать запрос. Что, само по себе и не удивительно (тело CTE перелапачивает свю таблицу). Так как же тогда рекомендуют ведущие собаководы? http://rsdn.ru/article/db/identity.xml#EQLAC
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: MS SQL 2008 & Paging
От:
Аноним
Дата:
13.05.09 07:24
Оценка:
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, <Аноним>, Вы писали: А>>Недавно появилась проблема. Заметил, что чем больше в Orders данных, тем тормознее начинает работать запрос. Что, само по себе и не удивительно (тело CTE перелапачивает свю таблицу). Так как же тогда рекомендуют ведущие собаководы? S>http://rsdn.ru/article/db/identity.xml#EQLAC
Здравствуйте, <Аноним>, Вы писали: А>Нашел способ, что предназначен для Sql 2005. Сравнил по актуальным планам, практически одинаков с моим способом. Чем он тогда лучше?
Там вроде был способ без Row_Number, на одних только ID. У тебя есть primary key в табличке? Тогда можно построить пейджинг за O(logN).
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: MS SQL 2008 & Paging
От:
Аноним
Дата:
13.05.09 08:38
Оценка:
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, <Аноним>, Вы писали: А>>Нашел способ, что предназначен для Sql 2005. Сравнил по актуальным планам, практически одинаков с моим способом. Чем он тогда лучше? S>Там вроде был способ без Row_Number, на одних только ID.
SELECT * FROM
(SELECT TOP (@PageSize) * FROM
(SELECT TOP (@Page * @PageSize + @PageSize) * FROM sys.objects
ORDER BY name ASC) SO1
ORDER BY name DESC) SO2
ORDER BY name
1. Тут сортировка по имени (что и логично, так как врядли пользователю интересна сортировка по идентификатору, он таких вещей то и не знает)
2. А чем плох row_number?
S>У тебя есть primary key в табличке? Тогда можно построить пейджинг за O(logN).
Да, конечно, есть. Подскажи, пожалуйста, как такое сделать?