我想序列化一個我已經反序列化的物件OPENJSON()。我在 SQL Server 中的 oject 下面存盤為NVARCHAR.
{
"Name":"Name1",
"Everyday":false,
"EveryWeek":true,
"RecurRange":"12-Apr-2022$12-Sep-2022"
}
為了使用 替換 Name 欄位OPENJSON(),我反序列化,存盤在一個臨時表中,其中 key、value 作為列,更新了 Name。
現在我想將該表序列化回初始格式。嘗試使用轉換FOR JSON AUTO:
CREATE TABLE #InfoTable([Key] NVARCHAR(MAX),Value NVARCHAR(MAX),Type INT)
INSERT INTO #InfoTable SELECT * FROM OpenJson(@jsondata)
UPDATE #InfoTable SET Value = 'NewName' WHERE [Key] = 'Name'
DECLARE @NewJson NVARCHAR(MAX) = (select * FROM #InfoTable FOR JSON AUTO)
但似乎不起作用:
[
{"Key":"Name","Value":"NewName","Type":1},
{"Key":"Everyday","Value":"false","Type":3},
{"Key":"EveryWeek","Value":"true","Type":2},
{"Key":"RecurRange","Value":"18-Apr-2022$14-May-2022","Type":1}
]
有沒有辦法將 OpenJson 回傳的表轉換回字串?
uj5u.com熱心網友回復:
如果要修改單個 JSON 物件中鍵的值,則需要JSON_MODIFY():
DECLARE @jsondata nvarchar(max) = N'{"Name":"Name1","Everyday":false,"EveryWeek":true,"RecurRange":"12-Apr-2022$12-Sep-2022"}'
SELECT @jsondata = JSON_MODIFY(
@jsondata,
'$.Name',
'NewName'
)
SELECT @jsondata
如果要使用當前方法,則需要使用OPENJSON()顯式模式:
DECLARE @jsondata nvarchar(max) = N'{"Name":"Name1","Everyday":false,"EveryWeek":true,"RecurRange":"12-Apr-2022$12-Sep-2022"}'
SELECT *
INTO #InfoTable
FROM OPENJSON(@jsondata) WITH (
Name nvarchar(max),
Everyday bit,
EveryWeek bit,
RecurRange nvarchar(max)
)
UPDATE #InfoTable
SET Name = 'NewName'
DECLARE @newjson NVARCHAR(MAX) = (
SELECT *
FROM #InfoTable
FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER
)
SELECT @newjson
最后,正如@Charlieface 建議的那樣,您可以使用以下方法簡化陳述句FOR JSON PATH:
DECLARE @jsondata nvarchar(max) = N'{"Name":"Name1","Everyday":false,"EveryWeek":true,"RecurRange":"12-Apr-2022$12-Sep-2022"}'
SELECT @jsondata = (
SELECT 'NewName' AS Name, Everyday, EveryWeek, RecurRange
FROM OPENJSON(@jsondata) WITH (
Name nvarchar(max),
Everyday bit,
EveryWeek bit,
RecurRange nvarchar(max)
)
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/476857.html
