我有一個帶有 JSON 列的 SQL Server 表。在其中,我有一個屬性“代碼”,其中包含一個具有一個值的字串。現在,我希望“代碼”成為一個能夠包含多個字串的陣列。
如何更新所有表值以將屬性更改為陣列?
"Code" : null --> "Code" : []
"Code" : "XX" --> "Code" : ["XX"]
uj5u.com熱心網友回復:
您可以嘗試JSON使用默認模式修改存盤為文本OPENJSON()以獲取$.Code部件的型別:
樣本資料:
SELECT *
INTO Data
FROM (VALUES
(CONVERT(nvarchar(max), N'{"Code": "XX"}')),
(CONVERT(nvarchar(max), N'{"Code": null}')),
(CONVERT(nvarchar(max), N'{"Code": 1}')),
(CONVERT(nvarchar(max), N'{"Code": []}')),
(CONVERT(nvarchar(max), N'{"Code": {}}'))
) d (JsonColumn)
陳述:
UPDATE d
SET JsonColumn = JSON_MODIFY(
JsonColumn,
'$.Code',
JSON_QUERY(CONCAT('[', j.[value], ']'))
)
FROM Data d
OUTER APPLY (
SELECT
CASE
WHEN [type] = 0 THEN ''
WHEN [type] = 1 THEN CONCAT('"', STRING_ESCAPE([value], 'json'), '"')
WHEN [type] = 2 THEN [value]
ELSE '"not a scalar value"'
END AS [value]
FROM OPENJSON(d.JsonColumn, '$')
WHERE [key] = 'Code'
) j
結果:
JsonColumn
--------------------------------
{"Code": ["XX"]}
{"Code": []}
{"Code": [1]}
{"Code": ["not a scalar value"]}
{"Code": ["not a scalar value"]}
您可以考慮@JeroenMostert 的評論并使用如下內容:
UPDATE d
SET JsonColumn = JSON_MODIFY(
JsonColumn,
'$.Code',
JSON_QUERY(CONCAT('[', j.[value], ']'))
)
FROM Data d
OUTER APPLY (
SELECT IIF ([type] = 1, CONCAT('"', STRING_ESCAPE([value], 'json'), '"'), [value]) AS [value]
FROM OPENJSON(d.JsonColumn, '$')
WHERE [key] = 'Code'
) j
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/441801.html
上一篇:ASP.NETMVC5/C#Foreach回圈-重復相同的資料
下一篇:使用大小寫根據鍵連接某些值
