Единственное частично работоспособное решение для большой таблицы на SQL Server 2000, о котором я знаю, это шаблон
SELECT TOP 100 *
FROM products p1
WHERE p1.productID not in (SELECT TOP 200 productID FROM products p2)
. Это отобразит строки 201-300.
Если упорядочение и фильтрациятребуется (и обычно это так), вам нужно убедиться, что порядок и фильтр одинаковы как в запросе, так и в подзапросе (в противном случае результаты выглядят немного странно), например
SELECT TOP 100 *
FROM products p1
WHERE p1.productID not in (SELECT TOP 200 productID
FROM products p2
WHERE p2.productGroup = 2
ORDER BY p2.productName)
AND p1.productGroup = 2
ORDER BY p1.productName
(это возвращаетПродукт 201–300, где группа productGroup имеет 2 упорядоченные по имени).
Недостатком этого подхода является то, что SQL Server 2000 не поддерживает синтаксис TOP @variable
, поэтому значения 100 и 200 в приведенном выше запросе не могут быть легкоparametricized.Чтобы сгенерировать этот запрос, вам нужно будет либо использовать SP, который будет использовать динамический SQL, либо скомпилировать его в клиентском приложении, а затем отправить его в базу данных как есть.
В несвязанной речи я всегдаИнтересно, почему это не поддерживается на уровне базы данных, например, что-то вроде
SELECT ROW 201-300 *
FROM products
WHERE....
, поскольку этот сценарий появляется снова и снова.