MS SQL ограничение лимита без заказа сверху и без верха - PullRequest
0 голосов
/ 22 января 2012

У меня есть слой ORM, который может взаимодействовать с несколькими БД, MYSQL, ORACLE, MS SQL и
Я использую страницы в своих приложениях, но я не знал, что могу получить результаты
как страницы прямо из запроса, поэтому я обновляю слой ORM, чтобы соответствовать 3 БД
Я упоминал.


In MYSQL SELECT * FROM myTable limit 5,5
В ORACLE SELECT * FROM ( SELECT * FROM myTable as t WHERE rownum < 100 ) WEHRE rownum > 10
Но в MS SQL я не могу найти способ получить ORDER BY в запросе

Я прошу прощения за любые синтаксические ошибки в запросах, они из памяти.

У меня вопрос, есть ли способ избавиться от ORDER BY и получить возможности подкачки для MS SQL

Ответы [ 3 ]

4 голосов
/ 22 января 2012

Пожалуйста, подумайте, что вы здесь делаете.
Независимо от того, какой движок базы данных вы используете, абсолютно бессмысленно пытаться избавиться от ORDER BY, когда вы хотите использовать подкачку.

Строки в реляционных базах данных не имеют фиксированного порядка, вам нужно указать предложение ORDER BY, если вы хотите получать строки в определенном порядке.
Если вы не укажите предложение ORDER BY,ядро базы данных будет возвращать строки в случайном порядке.Часто порядок выглядит разумным (например, упорядоченным по первичному ключу), и если вы выполняете один и тот же запрос более одного раза, порядок действительно может быть одинаковым.

Но на самом деле это все случайно, иВы не можете полагаться на то, что этот «псевдо-порядок» имеет какой-либо смысл или является одинаковым в каждом запросе.
Поэтому подкачка страниц без указания порядка не имеет абсолютно никакого смысла.

2 голосов
/ 22 января 2012

Попробуйте

SELECT 
  * 
FROM 
  ( SELECT *,ROW_NUMBER() OVER (ORDER BY <some_col>) as rownum FROM myTable ) t 
WHERE rownum >= UpperLimit AND  rownum <= LowerLimit

Замените <some_col> некоторым столбцом в вашей таблице, который определяет порядок, в котором вы хотите просматривать свои данные.

1 голос
/ 22 января 2012

Я не уверен, в чем проблема.Вы можете написать:

select TOP 10 * from T

Это прекрасно работает.

Обычно это не имеет смысла, поскольку конкретный порядок не гарантируется.Он может даже меняться от запроса к запросу.

Но он может иметь смысл, если все, что вас волнует, - это получить любые 10 записей из определенной таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...