C# 在T-SQL查询中使用新的SQL Server 2016 FOR JSON PATH语句,并返回JSON的多行(或结果集)

C# 在T-SQL查询中使用新的SQL Server 2016 FOR JSON PATH语句,并返回JSON的多行(或结果集),c#,sql,json,sql-server,C#,Sql,Json,Sql Server,我已经设置了一个类似于SQLFIDLE的查询 它返回单个JSON(SQLServer2016+列中提供的功能) 正如您可能想象的那样,我正在将JSON发布到Web API端点 但是,Web API端点将每个请求可以提交的“行”数限制为25 因此,在我的示例中,我希望返回4行JSON或4个JSON结果集,而不是返回包含100条记录的1行JSON 那能做到吗?需要如何重构才能做到这一点?您可以使用NTILE()和FOR JSON PATH尝试以下方法: 声明: ;WITH cte AS (

我已经设置了一个类似于SQLFIDLE的查询

它返回单个JSON(SQLServer2016+列中提供的功能)

正如您可能想象的那样,我正在将JSON发布到Web API端点

但是,Web API端点将每个请求可以提交的“行”数限制为25

因此,在我的示例中,我希望返回4行JSON或4个JSON结果集,而不是返回包含100条记录的1行JSON


那能做到吗?需要如何重构才能做到这一点?

您可以使用
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)
结果(使用您的测试数据):


fiddle很好,但是您需要在问题中发布足够的代码以使其独立。您将返回一个Json数组。您能在代码中将其反序列化为列表吗?您是否严格需要在SQL中执行此操作?@DaleBurrell,对不起,我不明白。@ZeinSleiman,现在我只是被告知使用SQL中的json获取。我要求反序列化为POCO,但被否决了。好问题。请更新您的问题,使其包含理解您的问题所需的最低代码(例如,sqlfiddle站点已关闭)。Zhorov,完美…正是我在寻找的。不熟悉NTILE功能。
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"}]