【问题标题】:SQL Json null value openjsonSQL Json 空值 openjson
【发布时间】:2019-01-16 23:28:34
【问题描述】:

当我运行这个时,我得到一个错误我如何考虑到该值可能是 null 并且它不会引发错误?

       declare @Concepts varchar(500)

    set @Concepts = '{"Concepts":null}';

   select [value] from openjson(@Concepts,'strict $.Concepts')

当它不为空时

    set @Concepts = '{"Concepts": [4324,2342]}';

这是我遇到的错误

JSON 路径引用的值不是数组或对象,不能用 OPENJSON 打开。

【问题讨论】:

  • 您遇到的错误是什么?使用查询结果的空引用异常,还是解析/运行查询时出错?请注意,NULL 在 SQL 中的行为与大多数其他语言不同(例如,不要尝试使用 X = NULL,而是使用 X IS NULLX IS NOT NULL)。
  • JSON 路径引用的值不是数组或对象,不能用 OPENJSON 打开。是错误理解他们的行为不同我更多的是在谈论我的 JSON 中有 null 的地方
  • Concepts 不是 null 时应该是什么?正确答案取决于它是另一个 JSON 对象还是标量值。
  • 我更新了我的问题

标签: sql sql-server sql-server-2016


【解决方案1】:

我发现从'strict $.Concepts' 中取出字符串'strict' 解决了我的问题

 declare @Concepts varchar(500)
 set @Concepts = '{"Concepts":null}';
 select [value] from openjson(@Concepts,'$.Concepts')

【讨论】:

  • 天啊。现在我觉得很傻......我错过了这个,因为我用{"Concepts":3} 进行了测试。在这种情况下,这种方法将不起作用,因为它不会返回任何行。 (不过,我建议的答案也不会,此后将被删除。)需要注意的一点是,strict 的省略意味着即使Concepts 属性完全丢失,此查询也会成功,这可能是也可能不是你想要的。
  • 感谢您在我的场景中提供的帮助我不在乎它是否完全丢失我是 JSON 和 SQL 服务器的新手,所以我能得到任何帮助表示感谢。
猜你喜欢
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
  • 2016-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多