Как именно работает этот постраничный запрос выбора?

Я довольно новый в Microsoft SQL Server, и я не так в БД.

У меня есть сомнения, связанные с этим запросом (который выполняется внутри кода веб-приложения, над которым я работаю):

SELECT * FROM VulnerabilityAlertDocument WHERE (1=1) ORDER BY Published DESC OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;

Из того, что я понимаю, мне возвращаются все поля из 10 строк в моей таблице (упорядоченные по убыванию в соответствии со значением значения столбца "Опубликованные").

Так что в моем веб-приложении оно используется для получения постраничного представления.

Например, у меня есть представление, которое показывает мне таблицу, которая в начале содержит первые 10 записей, затем я могу нажать на кнопку "Далее", запрос выполняется снова, и я показываю записи в диапазоне от 11 до 20 и т. Д. снова...

Я сомневаюсь: почему, если я выполняю этот запрос в Microsoft SQL Manager Stusio в первый раз, я получаю первые 10 записей, но если я пытаюсь выполнить его снова, я не получаю записи между 10 и 20, но я получаю снова первые 10 записи?

1 ответ

Решение

Вы можете найти очень хорошую документацию по синтаксису SQL Server на MSDN: http://technet.microsoft.com/en-us/library/gg699618.aspx

Короче, OFFSET 0 ROWS означает начинать со строки 0, если вы установите смещение на 10, вы получите следующий набор из 10 строк:

SELECT * FROM VulnerabilityAlertDocument WHERE (1=1) ORDER BY Published DESC OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;

SQL Server не отслеживает, какие строки вы уже запрашивали, это ваше дело.

Другие вопросы по тегам