LIMIT 10..20 в SQL Server - PullRequest
       84

LIMIT 10..20 в SQL Server

154 голосов
/ 09 июня 2009

Я пытаюсь сделать что-то вроде:

SELECT * FROM table LIMIT 10,20

или

SELECT * FROM table LIMIT 10 OFFSET 10

, но с использованием SQL Server

Единственное найденное мной решение выглядит как излишнее:

SELECT * FROM ( 
  SELECT *, ROW_NUMBER() OVER (ORDER BY name) as row FROM sys.databases 
 ) a WHERE row > 5 and row <= 10

Я также нашел :

SELECT TOP 10 * FROM stuff; 

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

Есть ли другой способ для меня это сделать?

Также, просто любопытно, есть ли причина, почему SQL Server не поддерживает функцию LIMIT или что-то подобное? Я не хочу быть злым, но это действительно похоже на то, что нужно СУБД. Последние 5 лет я работаю с MySQL и SQL +, поэтому ...

Ответы [ 15 ]

0 голосов
/ 05 июня 2015
 SELECT * FROM users WHERE Id Between 15 and 25

будет напечатано от 15 до 25 как предел в MYSQl

0 голосов
/ 10 января 2015

Использовать все сервера SQL: ; с табличным символом как (SELECT ROW_NUMBER () более (упорядочить по (выберите 1)) как RowIndex, * из таблицы) выберите топ 10 * из таблицы, где RowIndex> = 10

0 голосов
/ 09 октября 2013

Из электронной документации по MS SQL Server (http://technet.microsoft.com/en-us/library/ms186734.aspx ), вот их пример, который я протестировал и работает, для получения определенного набора строк. ROW_NUMBER требует OVER, но вы можете сделать заказ по своему усмотрению:

WITH OrderedOrders AS
(
  SELECT SalesOrderID, OrderDate,
  ROW_NUMBER() OVER (ORDER BY OrderDate) AS RowNumber
  FROM Sales.SalesOrderHeader 
) 
SELECT SalesOrderID, OrderDate, RowNumber  
FROM OrderedOrders 
WHERE RowNumber BETWEEN 50 AND 60;
0 голосов
/ 09 августа 2013

Пока этот формат работает для меня (но не самая лучшая производительность):

SELECT TOP {desired amount of rows} * 
FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY {order columns} asc)__row__ FROM {table})tmp
WHERE __row__ > {offset row count}

Примечание на боковой панели, разбиение на страницы над динамическими данными может привести к странным / неожиданным результатам.

0 голосов
/ 22 января 2013
select * from (select id,name,ROW_NUMBER() OVER (ORDER BY id  asc) as row
from tableName1) tbl1
where tbl1.row>=10 and tbl1.row<=15

Будет печатать строки с 10 до 15.

...