Openjson 在定义 nvarchar(max) 时不返回 json 对象,并且由 nvarchar(4000) 工作
Posted
技术标签:
【中文标题】Openjson 在定义 nvarchar(max) 时不返回 json 对象,并且由 nvarchar(4000) 工作【英文标题】:Openjson is not returning the json object when defining nvarchar(max), and working by nvarchar(4000) 【发布时间】:2019-11-05 13:38:54 【问题描述】:我尝试从 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
【问题讨论】:
不要使用nvarchar(max)
,除非您确实需要存储超过 4K 的 Unicode 数据
就是这样......否则我不会有问题
很多人使用max
,因此他们不必指定大小,没有意识到它会影响存储、索引和性能。
这不是查询之间的唯一区别...“不工作”查询使用as json
是的,在 openjson 中使用 nvarchar(max) 是正常的
【参考方案1】:
可能包含的 JSON 不正确。 JSON 在技术上需要 UTF8 编码,因此您可以验证这一点。您还应该验证所包含的 JSON 是否有效且未分段(包含多个 JSON 元素)。
我一直使用 nvarchar(max) ... 作为 json 并且没有任何问题,所以我怀疑它与长度有关,而是 SQL Server 可能以不同方式验证和/或解析文本的事实使用“作为 json”
【讨论】:
以上是关于Openjson 在定义 nvarchar(max) 时不返回 json 对象,并且由 nvarchar(4000) 工作的主要内容,如果未能解决你的问题,请参考以下文章