插入使用 FOR JSON 子句生成的单个 JSON 对象
你可以使用带有 FOR JSON 子句和 WITHOUT_ARRAY_WRAPPER 选项的标准 SELECT 查询生成 JSON 对象,并将其作为第三个参数插入 JSON 文本中:
declare @json nvarchar(4000) = N'{"Id":17,"Name":"WWI"}'
set @json = JSON_MODIFY(@json, '$.table',
JSON_QUERY(
(select name, create_date, schema_id
from sys.tables
where name = 'Colors'
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)))
print @json
(1 row(s) affected)
{"Id":17,"Name":"WWI","table":{"name":"Colors","create_date":"2016-06-02T10:04:03.280","schema_id":13}}
如果 SELECT 查询返回多个结果,则带有 WITHOUT_ARRAY_WRAPPER 选项的 FOR JSON 可能会生成无效的 JSON 文本(在这种情况下,你应使用 TOP 1 或按主键过滤)。因此,JSON_MODIFY 将假定返回的结果只是一个纯文本,如果不使用 JSON_QUERY 函数将其包装,则将其转义为任何其他文本。
你应该使用 JSON_QUERY 函数包装 FOR JSON,WITHOUT_ARRAY_WRAPPER 查询,以便将结果转换为 JSON。 ****