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:

SSMS Показать результат

Я бы не советовал - "как долго это кусок строки", а вместо этого выбрать результат в nvarchar(max) переменная и PRINT эта переменная. Это должно дать вам весь текст.

Надеюсь это поможет!

Другие вопросы по тегам