Есть ли в MS-SQL эквивалент «START AT»?

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

SELECT TOP 10 START AT 10 * FROM <TABLE>

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

Мне любопытно, какие базы данных, кроме Sybase SQL Anywhere, поддерживают предложение START AT?

Lukas Eder 12.01.2012 12:19
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
11
1
8 883
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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
Ответ принят как подходящий

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

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

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

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

Если вы хотите быть совместимым с 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;

Для SQL Server 2012

SELECT * 
FROM <TABLE>
ORDER BY <SomeCol>
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;

Приятно видеть, что SQL Server наконец-то добавляет некую спецификацию OFFSET! Этот синтаксис кажется совместимым с DB2, Derby и Ingres ...

Lukas Eder 12.01.2012 13:12

@LukasEder - это стандарт SQL: 2008 Насколько мне известно

Martin Smith 12.01.2012 13:22

Хм, в последний черновик SQL: 2008, который я видел не упоминается такое расширение для <order by clause> (стр. 837 в 5CD2-02-Foundation-2006-01.pdf). Но это всего лишь черновик, поэтому, возможно, в окончательном стандартном документе SQL: 2008 они, возможно, действительно добавили этот пункт ...? Комментарии можно редактировать только в течение 5 минут (щелкните это поле, чтобы отклонить)

Lukas Eder 12.01.2012 13:43

@LukasEder - Не знаю. Я просто отклонился от того, что говорит моя предыдущая ссылка. У меня тоже нет доступа к копии.

Martin Smith 12.01.2012 13:47

Другие вопросы по теме