Наверное многие разработчики, работавшие с 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]
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;
Комментариев нет:
Отправить комментарий