Реферат: К вопросу об идентификаторах

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
Бесплатно скачать Реферат: К вопросу об идентификаторах