получить определенный диапазон строк в таблице SQL Server - PullRequest
7 голосов
/ 21 июня 2009

У меня есть структура таблицы, например (OrderID [uniqueidentifier], OrderDesciption [nvarchar]), я использую ADO.Net + C # + VSTS 2008 + SQL Server 2008. Таблица большая, и я хочу, чтобы клиент дал мне два входа, индекс начала диапазона и индекс конца диапазона, и я верну конкретные строки таблицы, которая находится в диапазоне (между индексом диапазона начала и индексом конца диапазона).

Например, если клиент вводит мне 50, 100, и я хочу вернуть 50-ю строку до 100-й строки.

спасибо заранее, George

Ответы [ 4 ]

15 голосов
/ 21 июня 2009

Вы можете использовать ROW_NUMBER в TSQL (начиная с 2005 г.), чтобы сделать это:

SELECT  ID, Foo, Bar
FROM     (SELECT  ROW_NUMBER() OVER (ORDER BY ID ASC) AS Row,
          ID, Foo, Bar
FROM    SomeTable) tmp
WHERE   Row >= 50 AND Row <= 100

Или с LINQ-to-SQL и т. Д .:

var qry = ctx.Table.Skip(50).Take(50); // or similar
4 голосов
/ 21 июня 2009

По сути, ваша лучшая ставка в SQL Server 2005 и 2008 - это CTE - общее табличное выражение - с функцией ROW_NUMBER () - что-то вроде этого:

WITH MyOrders AS
(
  SELECT
    OrderID,
    OrderDescription,
    ROW_NUMBER() OVER (ORDER BY OrderID) as 'RowNum'
  FROM YourOrders
)
SELECT * FROM MyOrders
WHERE RowNum BETWEEN 50 AND 100

Но для этого требуется полезное и подходящее предложение ORDER BY, и упорядочение по GUID на самом деле не очень хорошая идея. DATETIME или постоянно увеличивающийся ID был бы лучшим.

Марк

2 голосов
/ 21 июня 2009

Попробуйте, результат будет упорядочен по столбцу OrderID . Измените MyTable со своим столом.

SELECT * 
FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY OrderID) AS row FROM MyTable) a 
WHERE row > 50 AND row <= 100

Выбраны строки от 50 до 100 , но обратите внимание, что 50-я строка не включена в результат.

1 голос
/ 21 июня 2009

SELECT * FROM (SELECT *, ROW_NUMBER () OVER (ORDER BY OrderId) как строка из заказов) строка WHERE> 5 и строка <= 10 </p>

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