Реферат: К вопросу об идентификаторах
SET @MaxRecord = cast((@Page * @PageSize + @PageSize) as varchar(10))
SET @Count = cast(@PageSize as varchar(10))
EXECUTE ('SELECT * FROM
(SELECT TOP ' + @Count + ' * FROM
(SELECT TOP ' + @MaxRecord + ' * FROM sysobjects
ORDER BY name ASC) SO1
ORDER BY name DESC) SO2
ORDER BY name')
Однако при таком подходе следует быть внимательным, поскольку в случае не оптимально написанного запроса производительность падает довольно резко. Впрочем, на таких объемах, где это будет заметно, к написанию любого запроса надо подходить вдумчиво и аккуратно.
Если же вы испытываете подсознательный страх и неприязнь к динамическим запросам, то есть еще ряд способов. Например, можно сделать практически то же самое, что и приведенный выше запрос, но разложить его по частям, воспользовавшись временной таблицей. Из таблицы (или таблиц), которую нужно отобразить постранично, берется поле, однозначно идентифицирующее каждую запись, и скидывается в нужном порядке во временную табличку с автоинкрементным полем. Причем скидывается не все, а только до последней записи отображаемой страницы. А результирующая выборка делается с объединением с вышеупомянутой временной таблицей, ограничивая диапазон по автоинкрементному полю.
SET NOCOUNT ON DECLARE @Page int, @PageSize int, @MaxRecord int -- номер страницы SET @Page = 10 -- размер страницы SET @PageSize = 20 -- созданиевременногохранилища DECLARE @pg TABLE(RowNum int IDENTITY, OuterID int) -- максимальное количество записей, которое нужно забрать -- из исходной таблицы SET @MaxRecord = @Page*@PageSize + @PageSize -- установка количества записей обрабатываемых запросом SET ROWCOUNT @MaxRecord -- запись отсортированных данных в переменную INSERT INTO @pg (OuterID) SELECT ID FROM OriginalTable ORDER BY SortValue ASC -- теперь нужны записи для одной страницы SET ROWCOUNT @PageSize -- вот эти данные уходят на клиента К-во Просмотров: 408
Бесплатно скачать Реферат: К вопросу об идентификаторах
|