我已经下载并安装了 SQL Server 2016 Community Technology Preview 2.3,如果我理解正确的话,它应该包含一个名为JSON_VALUE
. (更新:CTP 2.4 已经发布,也没有提到新的 JSON 特性)
从已经起作用的 JSON 功能开始,... FOR JSON AUTO
可以在我的SELECT
语句中指定“”,如下所示:
SELECT [ID], [DATA] FROM [dbo].[JSONDEMO] FOR JSON AUTO
我上面的演示查询的结果将是一个包含一列的结果集,其中包含一些自动生成的JSON_F123123123
名称和 JSON 格式的值,例如:
[{"ID":"IDVALUE", "DATA":"{ {name:'ramsoft', id:1234}, ... }", ... }]
到目前为止一切顺利,但如果DATA
包含 JSON 数据,您将收到包含数据字符串文字的 JSON 文档,即使该字符串文字是有效的 JSON。您实际上可能想要的,或者我想要的是:
[{"ID":"IDVALUE", "DATA":{ {name:'ramsoft', id:1234}, ... }, ... }]
根据一些 MS 博客文章,要将 JSON 值作为 JSON 值而不是VARCHAR(n)
字符串获取,您应该这样写:
SELECT [ID], JSON_VALUE(D.DATA,'$') DATA
FROM [dbo].[JSONDEMO] D FOR JSON AUTO
这不起作用,我得到一个错误:
'JSON_VALUE' is not a recognized built-in function name.
CTP 2.3 中是否提供某种 JSON 值提取,或者直到 CTP 3 才会存在?
您需要等待 CTP 3 使用诸如
OPENJSON
和之类的东西JSON_VALUE
。这些构造根本没有在 CTP 2.4 及之前的 CTP 中发布。这并不意味着没有某种方法可以立即获得您想要的结果,但是您可能为此花费的时间和精力可能不值得,尤其是如果您需要的功能将在下一个可用时CTP,应该很快就会发货。