【发布时间】:2021-03-03 09:45:51
【问题描述】:
我正在进行的一个项目涉及在表格列中存储一串数据。该表将具有与记录相关的其他列。我们决定使用 JSON 存储字符串数据列。
从表中,视图会将 JSON 列解析为单独的列。该视图还将具有从其他主表列派生的列。然后,视图中的数据用于通过 SSRS 填充文档的某些部分。
将数据加载到主表时,我需要使用单独的表来导出其他列值和 JSON 列。我决定为此使用公用表表达式。在查询结束时,我将来自不同公用表表达式的派生列(包括 JSON 列)汇集在一起,并将它们插入到主表中。
我几乎完成了,直到我意识到当我使用 FOR JSON 创建 JSON 列时,它会转义特殊字符。我做了一些研究,并一直在尝试使用 JSON_QUERY 函数来解决这个问题,但它不起作用。这是问题的简化:
WITH Table1
(
First_Name_JSON
)
As
(
SELECT 'Tim/' As First_Name
FOR JSON PATH
)
SELECT JSON_QUERY(Table1.First_Name_JSON) as first_name
FROM Table1
FOR JSON PATH
这是输出:
[{"first_name":[{"First_Name":"Tim\/"}]}]
为什么它还在逃跑? documentation 表明传递由 FOR JSON 创建的列应该使 JSON_QUERY 函数返回它而不使用转义字符。
我知道这行得通:
SELECT JSON_QUERY('{"Firt_Name": "Tim/"}') as first_name
FOR JSON PATH
输出:
[{"first_name":{"Firt_Name": "Tim/"}}]
但是,我需要能够传递一个已经包含 JSON 数据的列,因为它的逻辑很长,包含许多列。与在每列周围硬编码 JSON 格式相比,使用 FOR JSON 是进行更改的理想选择。
我一定错过了什么。感谢您的帮助。
【问题讨论】:
标签: sql json sql-server