Используйте новый оператор SQL Server 2016 FOR JSON PATH в запросе T-SQL и возвращайте несколько строк (или наборов результатов) JSON - PullRequest
0 голосов
/ 29 октября 2019

Я настроил запрос, похожий на этот sqlfiddle

http://sqlfiddle.com/#!18/402f6/4

Он возвращает один столбец JSON (функция доступна в SQL Server 2016+).

Как вы можете себе представить, я отправляю JSON на конечную точку Web API.

Однако конечная точка Web API ограничивает число «строк», которые могут быть отправлены на запрос, 25.

Итак, в моем примере вместо того, чтобы возвращать 1 строку JSON с 100 записями, я бы хотел вернуть либо 4 строки JSON, либо 4 набора результатов JSON.

Можно ли это сделать? Как для этого нужно сделать рефакторинг?

1 Ответ

0 голосов
/ 29 октября 2019

Вы можете попробовать следующий подход, используя NTILE() и FOR JSON PATH:

Заявление:

;WITH cte AS (
   SELECT 
      id AS [StudentID], 
      first_name as [FirstName], 
      last_name as [LastName], 
      email as [Email], 
      gender as [Gender],
      NTILE(4) OVER (ORDER BY id) AS GroupID
   FROM TestData
)
SELECT
   DISTINCT t1.GroupID,
   t2.Json
FROM cte t1
CROSS APPLY (
   SELECT StudentID, FirstName, Email, Gender
   FROM cte
   WHERE GroupID = t1.GroupID
   FOR JSON PATH
) t2 (Json)

Результат (используя данные теста):

GroupID Json
1       [{"StudentID":1,"FirstName":"Myrtie","Email":"mgunning0@bandcamp.com","Gender":"Female"}, ... ,{"StudentID":25,"FirstName":"Dante","Email":"dtoopeo@chronoengine.com","Gender":"Male"}]
2       [{"StudentID":26,"FirstName":"Hamilton","Email":"hginnanep@joomla.org","Gender":"Male"}, ... ,{"StudentID":50,"FirstName":"Enrika","Email":"ehayselden1d@weibo.com","Gender":"Female"}]
3       [{"StudentID":51,"FirstName":"Cirilo","Email":"cfrankcomb1e@blogspot.com","Gender":"Male"}, ...  ,{"StudentID":75,"FirstName":"Zeke","Email":"zleal22@eepurl.com","Gender":"Male"}]
4       [{"StudentID":76,"FirstName":"Todd","Email":"tscandred23@who.int","Gender":"Male"}, ...  ,{"StudentID":100,"FirstName":"Kristi","Email":"kpossek2r@wikispaces.com","Gender":"Female"}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...