У меня возникли проблемы с решением проблемы с разбиением на страницы в SQL.
Я застрял, пытаясь заполнить переменную @PageSize в моей хранимой процедуре, полученной из некоторого ODATA, однако значение из ODATA не понимает, что мне нужно. Мой запрос, который вы видите, возвращает результаты, подобные этому.
+----+----------+
| ID | PersonID |
+----+----------+
| 1 | 1 |
+----+----------+
| 1 | 2 |
+----+----------+
| 2 | 1 |
+----+----------+
| 2 | 2 |
+----+----------+
| 2 | 3 |
+----+----------+
| 3 | 4 |
+----+----------+
| 3 | 4 |
+----+----------+
Очевидно, что если бы я получил @PageResult = 5 от OData, он просто вернул бы 5 строк, но я хочу, чтобы он возвращал x вхождений ID.
Чтобы продемонстрировать, что я в основном хочу, это то, что если мой @PageSize равен 1, мой spro c вернет это.
+----+----------+
| ID | PersonID |
+----+----------+
| 1 | 1 |
+----+----------+
| 1 | 2 |
+----+----------+
Если это 2, я верну это.
+----+----------+
| ID | PersonID |
+----+----------+
| 1 | 1 |
+----+----------+
| 1 | 2 |
+----+----------+
| 2 | 1 |
+----+----------+
| 2 | 2 |
+----+----------+
| 2 | 3 |
+----+----------+
И так далее. У меня нет конца проблем, пытаясь заставить его возвращать данные таким образом, я пытался делать такие вещи, как отличный идентификатор top (@pagesize), но всегда кажется, что порядок неверен, поэтому он пропускает идентификаторы, а Похоже, делать работу тоже. Я предполагаю, что это доставляет мне много хлопот, потому что в SQL нет порядка по умолчанию, поэтому решение не так очевидно. Кто-нибудь из вас может подсказать, как мне этого добиться?
Самое близкое, что я получил, это
SET @PageSize = (select COUNT(personId) from #temptable WHERE ID IN (SELECT DISTINCT TOP(@PageSize) ID From #temptable))