У меня такой запрос с MySQL:
select * from table1 LIMIT 10,20
Как я могу сделать это с помощью SQL Server?
sql
sql-server
migration
Большие шары
источник
источник
Ответы:
Начиная с SQL SERVER 2005, вы можете сделать это ...
или что-то подобное для версий 2000 и ниже ...
источник
Неуклюже, но это сработает.
Отсутствие MSSQL пункта LIMIT является преступлением, ИМО. Вам не нужно делать такого неуклюжего обходного пути.
источник
Начиная с SQL SERVER 2012, вы можете использовать предложение OFFSET FETCH:
http://msdn.microsoft.com/en-us/library/ms188385(v=sql.110).aspx
Это может работать неправильно, если порядок по не уникален.
Если запрос изменен на ORDER BY OrderDate, возвращаемый набор результатов не соответствует ожидаемому.
источник
Это почти дубликат вопроса, который я задал в октябре: Эмуляция предложения MySQL LIMIT в Microsoft SQL Server 2000
Если вы используете Microsoft SQL Server 2000, хорошего решения нет. Большинству людей приходится прибегать к фиксации результата запроса во временной таблице с
IDENTITY
первичным ключом. Затем запросите столбец первичного ключа, используяBETWEEN
условие.Если вы используете Microsoft SQL Server 2005 или более позднюю версию, у вас есть
ROW_NUMBER()
функция, поэтому вы можете получить тот же результат, но избегать временной таблицы.Вы также можете написать это как общее выражение таблицы , как показано в @Leon Tayson в ответ .
источник
Вот как я ограничиваю результаты в MS SQL Server 2012:
ПРИМЕЧАНИЕ:
OFFSET
может использоваться только с или в тандеме сORDER BY
.Чтобы объяснить строку кода
OFFSET xx ROWS FETCH NEXT yy ROW ONLY
Это номер
xx
записи / строки, из которой вы хотите начать извлечение в таблице, то есть: если в таблице 1 40 записей, приведенный выше код начнет извлекать из строки 10.Это
yy
количество записей / строк, которые вы хотите извлечь из таблицы.Основываясь на предыдущем примере: если таблица 1 содержит 40 записей, и вы начали извлекать из строки 10 и взять СЛЕДУЮЩИЙ набор из 10 (
yy
). Это будет означать, что приведенный выше код будет извлекать записи из таблицы 1, начиная со строки 10 и заканчивая 20. Таким образом, извлекаются строки 10-20.Перейдите по ссылке для получения дополнительной информации о OFFSET
источник
источник
Синтаксически запрос MySQL LIMIT выглядит примерно так:
Это можно перевести на Microsoft SQL Server, например
Теперь ваш запрос
select * from table1 LIMIT 10,20
будет таким:источник
Это одна из причин, по которой я стараюсь избегать использования MS Server ... но в любом случае. Иногда у вас просто нет возможности (ага! И мне нужно использовать устаревшую версию !!).
Мое предложение - создать виртуальную таблицу:
Из:
Для того, чтобы:
Затем просто запросите:
Если поля добавляются или удаляются, «строка» обновляется автоматически.
Основная проблема с этой опцией в том, что ORDER BY исправлен. Поэтому, если вам нужен другой порядок, вам придется создать другое представление.
ОБНОВИТЬ
У этого подхода есть еще одна проблема: если вы попытаетесь отфильтровать данные, это не сработает так, как ожидалось. Например, если вы это сделаете:
WHERE ограничивается теми данными, которые находятся в строках от 10 до 20 (вместо поиска всего набора данных и ограничения вывода).
источник
Это многоэтапный подход, который будет работать в SQL2000.
источник
источник
Должен попытаться. В приведенном ниже запросе вы можете увидеть группировку, порядок, пропуск строк и ограничение строк.
источник
Такой же как
Вот статья о реализации Limit в MsSQL. Ее приятно прочитать, особенно комментарии.
источник
В SQL нет ключевого слова LIMIT. Если вам нужно только ограниченное количество строк, вы должны использовать ключевое слово TOP, подобное LIMIT.
источник
Если ваш идентификатор является уникальным типом идентификатора или ваш идентификатор в таблице не отсортирован, вы должны сделать следующее.
Код будет
источник
- Назначение столбца [Количество] и присвоение каждой строке уникального подсчета без какого-либо заказа, затем снова выберите, где вы можете указать свои пределы .. :)
источник
Один из возможных способов получить результат, как показано ниже, надеюсь, это поможет.
источник
Простой способ
MYSQL:
MSSQL:
ORDER BY является обязательным
источник
Если я правильно помню (прошло некоторое время с тех пор, как я попробовал SQL Server), вы можете использовать что-то вроде этого: (2005 и новее)
источник
WHERE
на псевдоним, определенный в том жеSELECT
предложении уровня .