我可以在 SQL Server 2016 CTP 2.X 中将 VARCHAR 字段主体转换为不带引号的 JSON 结果吗?

War*_* P 3 sql-server json sql-server-2016

我已经下载并安装了 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
Run Code Online (Sandbox Code Playgroud)

上面我的演示查询的结果将是一个包含一列的结果集,具有一些自动生成的名称,例如JSON_F123123123JSON 格式的值,例如:

[{"ID":"IDVALUE", "DATA":"{ {name:'ramsoft', id:1234}, ... }", ... }] 
Run Code Online (Sandbox Code Playgroud)

到目前为止DATA一切顺利,但如果包含 JSON 数据,您将收到一个包含数据字符串文字的 JSON 文档,即使该字符串文字是有效的 JSON。你实际上可能想要的,或者我想要的,是:

 [{"ID":"IDVALUE", "DATA":{ {name:'ramsoft', id:1234}, ... }, ... }] 
Run Code Online (Sandbox Code Playgroud)

根据一些 MS 博客帖子,要将 JSON 值作为 JSON 值而不是作为VARCHAR(n)字符串获取,您应该编写:

SELECT [ID], JSON_VALUE(D.DATA,'$') DATA   
FROM [dbo].[JSONDEMO] D FOR JSON AUTO
Run Code Online (Sandbox Code Playgroud)

这不起作用,我收到一个错误:

'JSON_VALUE' is not a recognized built-in function name.
Run Code Online (Sandbox Code Playgroud)

CTP 2.3 中是否提供某种 JSON 值提取,或者在 CTP 3 之前不会存在?

Aar*_*and 5

您需要等待 CTP 3 使用OPENJSON和 之类的东西JSON_VALUE。这些构造根本没有在 CTP 中提供,包括 CTP 2.4。这并不意味着没有某种方法可以立即获得您想要的结果,但是您可能花费的时间和精力可能不值得,尤其是如果您需要的功能将在下一个可用CTP,应该很快发货。