【发布时间】:2018-02-03 08:28:41
【问题描述】:
我正在尝试使用“for json path”语句在复杂且嵌套的 JSON 字符串中生成大量数据,并且我正在使用多个函数来创建此 JSON 字符串的不同部分,如下所示:
declare @queue nvarchar(max)
select @queue = (
select x.ID as layoutID
, l.Title as layoutName
, JSON_QUERY(queue_objects (@productID, x.ID)) as [objects]
from Layouts x
inner join LayoutLanguages l on l.LayoutID = x.ID
where x.ID = @layoutid
group by x.ID, l.Title
for json path
)
select @queue as JSON
到目前为止,JSON 应该是:
{
"root": [{
"layouts": [{
"layoutID": 5
, "layoutName": "foo"
, "objects": []
}]
}]
}
然后会调用“queue_objects”函数来填充“objects”数组:
queue_objects
select 0 as objectID
, case when (select inherited_counter(@layoutID,0)) > 0 then 'false' else 'true' end as editable
, JSON_QUERY(queue_properties (p.Table2ID)) as propertyObjects
, JSON_QUERY('[]') as inherited
from productList p
where p.Table1ID = @productID
group by p.Table2ID
for json path
然后 JSON 将是:
{
"root": [{
"layouts": [{
"layoutID": 5
, "layoutName": "foo"
, "objects": [{
"objectID": 1000
, "editable": "true"
, "propertyObjects": []
, "inherited": []
}, {
"objectID": 2000
, "editable": "false"
, "propertyObjects": []
, "inherited": []
}]
}]
}]
}
还将调用“inherited_counter”和“queue_properties”函数来填充相应的键。
这只是一个示例,由于我没有在此处放置函数,因此代码将不起作用。
但我的问题是:是函数同时相互调用,使服务器返回损坏的 JSON 字符串吗?还是服务器本身无法处理超过 2984 行的 JSON 字符串?
编辑:我的意思是2984行,是我在JSON上使用美化器,服务器不会逐行返回字符串,它返回JSON损坏,但美化后恰好是2984行字符串。
【问题讨论】:
-
当您获得 2984 行时 - 您是否在 SSMS 中运行它?为什么我要问是因为 SSMS 对执行 SELECT 时返回的数量有限制:“工具 | 选项 | 查询结果 | SQL Server | 网格结果 | 检索到的最大字符数。”
-
是的,我确实在 SSMS 上运行了我的查询,我认为这应该是答案!那么如何增加可以获得的数据量呢?这整个故事是否会影响我从网页获得的结果?查询数据库以获取结果的页面?
标签: sql json sql-server-2016 json-query for-json