插入使用 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。 ****