Openjson не возвращает объект json при определении nvarchar (max) и работает с помощью nvarchar (4000) - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь извлечь вложенный JSON из JSON ([запрос]), если я так делаю, - с помощью nvarchar (4000) он работает (к сожалению, некоторые данные больше) - с помощью nvarchar (max) в качестве json,поле остается пустым ... почему ??

- query = null:

SELECT 
visualContainers
     ,json1.[query]                                                

FROM [ReportServer_PBI].[Sections_RowSource] [sections]  
CROSS APPLY  OPENJSON(visualContainers)
WITH (
     [query]                                                     NVARCHAR(max)   '$.query'  as json
    ,[visualContainers.displayName]                              NVARCHAR(100)   '$.displayName' 
    ) as json1

- запрос содержит данные:

    SELECT 
visualContainers
     ,json1.[query]                                                

FROM [ReportServer_PBI].[Sections_RowSource] [sections]  
CROSS APPLY  OPENJSON(visualContainers)
WITH (
     [query]                                                     NVARCHAR(4000)   '$.query' 
    ,[visualContainers.displayName]                              NVARCHAR(100)   '$.displayName' 
    ) as json1

1 Ответ

0 голосов
/ 15 ноября 2019

Скорее всего, содержащийся JSON не подходит. Технически JSON требует кодировки UTF8, так что вы можете это проверить. Вам также следует убедиться, что содержащийся JSON является действительным и не фрагментирован (содержит несколько элементов JSON).

Я все время использую nvarchar (max) ... в качестве json и не имею проблем с ним, поэтому ясомневаюсь, что это связано с длиной, а скорее с тем фактом, что SQL Server, вероятно, проверяет и / или анализирует текст по-разному при использовании «as json»

...