SQL Server:如何从JSON中选择4001字符属性

时间:2017-06-22 13:54:57

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

我有一个SQL表,其中包含用于JSON数据的nvarchar(max)列。其中一个JSON属性是另一个JSON对象的字符串版本。这个内部JSON字面上包含转义引号等。示例:

{
  "id": 55,
  "innerJson": "{\"innerId\": 199}"
}

内部JSON长约10,000个字符,可以提供或者需要几千个字符。

我希望能够在SQL服务器中选择这个内部JSON,但是,我似乎遇到了4000个字符的限制。使用JSON_VALUE()并且使用JSON_QUERY()太简单太长了,这非常令人沮丧。

MSDN says"如果你必须返回大于4000个字符的标量值,请使用OPENJSON",但并不能真正描述如何。

我找到了一种方法来选择它,但它涉及嵌套的OPENJSON()调用:

select *
from OPENJSON((
    select [value]
    from OPENJSON((
        select JsonColumn
        from table
        where Id = 55
    ))
    where [key] = 'innerJson'
))

但是,这不起作用:

select *
from OPENJSON((
    select JsonColumn
    from table
    where Id = 55
), '$.innerJson')

所以,我的问题:

  1. 有没有办法选择> 4000个字符串?

  2. 是否有更简洁的方式来选择" innerJson"不使用嵌套的OPENJSON调用?我是否必须嵌套它,因为它是一个字符串,而不是一个对象?

  3. 为什么第二个查询不起作用?是因为我遇到了4000个字符的限制吗?

  4. 谢谢!

0 个答案:

没有答案