SQL Server - оператор "для пути json" не возвращает более 2984 строк строки JSON
Я пытаюсь сгенерировать огромное количество данных в сложной и вложенной строке JSON с помощью оператора "для пути 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 для заполнения массива объектов:
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": []
}]
}]
}]
}
Также для вызова соответствующих ключей были бы вызваны функции "Legited_counter" и "Queue_properties".
Это всего лишь пример, код не будет работать, так как я не размещаю здесь функции.
Но мой вопрос: заставляет ли сервер одновременно возвращать битую строку JSON из-за функций, которые одновременно вызывают друг друга? или сам сервер не может обрабатывать строки JSON больше чем 2984 строки?
РЕДАКТИРОВАТЬ: то, что я имею в виду под 2984 строками, это то, что я использую beautifier в JSON, сервер не будет возвращать строку строка за строкой, он возвращает JSON с разбивкой, но после украшения получается 2984 строки строки.
1 ответ
Как я написал в своем комментарии к OP, это, вероятно, связано с тем, что SSMS имеет ограничение на количество символов, отображаемых в столбце в таблице результатов. Это не влияет на фактический результат, например, результат имеет все данные, просто SSMS не отображает все это.
Чтобы это исправить, вы можете увеличить количество символов, получаемых SSMS:
Я бы не советовал - "как долго это кусок строки", а вместо этого выбрать результат в nvarchar(max)
переменная и PRINT
эта переменная. Это должно дать вам весь текст.
Надеюсь это поможет!