Есть ли в MS-SQL эквивалент «START AT»? - PullRequest
10 голосов
/ 12 ноября 2008

Некоторые базы данных поддерживают такие команды, как:

SELECT TOP 10 START AT 10 * FROM <TABLE>

По сути, мне нужно вытащить первые 10 записей, затем следующие 10, затем следующие 10 и т. Д. Возможно, есть другой способ сделать это, но в прошлом я делал это, как описано выше для баз данных, которые поддерживают 'START AT».

Ответы [ 4 ]

6 голосов
/ 12 января 2012

Для SQL Server 2012

SELECT * 
FROM <TABLE>
ORDER BY <SomeCol>
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
5 голосов
/ 12 ноября 2008

Какая версия SQL Server?

В SQL Server 2000 это настоящая боль (хотя возможно использование уродливых трюков, подобных тому, что опубликовал stingyjack).

В 2005 году и позже это немного проще - посмотрите на функцию Row_Number () .

И, в зависимости от вашего клиентского приложения, это может быть даже не так сложно. Некоторые элементы управления сеткой ASP.Net поддерживают автоматическое разбиение на страницы.

4 голосов
/ 12 ноября 2008

Если вы хотите быть совместимым с SQL Server 2000, вы можете использовать

SELECT * FROM
(
    SELECT TOP 10 FROM
    (
        SELECT TOP (n * 10) FROM <table> ORDER BY (column) ASC
    ) AS t1 ORDER BY (column) DESC
) AS t2 ORDER BY (column) ASC

В SQL Server 2005 появилась новая функция Row_Number (). Вы можете использовать это так:

WITH Orders AS 
(
     SELECT SalesOrderID, OrderDate, 
     ROW_NUMBER() OVER (order by OrderDate) AS 'RowNumber' 
     FROM SalesOrder
) 
SELECT * 
FROM Orders 
WHERE RowNumber between 10 and 19;
4 голосов
/ 12 ноября 2008
SELECT Top 10 * 
FROM Table 
WHERE <primary key> Not IN (
    SELECT Top 10 <primaryKey> 
    FROM Table 
    ORDER BY <primary Key> ASC) 
ORDER BY <primary Key> ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...