четверг, 13 марта 2014 г.

LIMIT в MSSQL

Наверное многие разработчики, работавшие с MySQL, недоумевают почему в MSSQL нет аналога инструкции LIMIT и как без нее вообще жить. Рассказываю как. Вот как сделать аналог LIMIT 5,10 для вот такой таблицы:


Вариант номер 1:
   
    SELECT top 10 * FROM [test].[dbo].[limit_test] WHERE [id] NOT IN (
    SELECT top 5 [id] FROM [test].[dbo].[limit_test] ORDER BY [id]
    ) ORDER BY [id]


Вариант номер 2:
    SELECT * FROM (
    SELECT TOP 15 *, ROW_NUMBER() OVER(ORDER by [id]) rowNumber  FROM [test].[dbo].[limit_test]
    ) T WHERE rowNumber BETWEEN 5 AND 15

Ну, а в MSSQL 2012 среди всяких прочих плюшек ввели более вменяемы вариант конструкции для выборки нескольких рядов начиная с какого-то. Кстати, в Orcale с 2012 года тоже такой вариант поддерживает, а раньше, кстати, у них даже TOP не было, и ничего.
 SELECT * FROM [test].[dbo].[limit_test]
 ORDER BY [id]
 OFFSET 5 ROWS
 FETCH NEXT 10 ROWS ONLY;

Комментариев нет:

Отправить комментарий