[英]TSQL Join JSON object array property
我有一個存儲過程,它接受我使用來自 OPENJSON() 的數據插入的 JSON 字符串。
我的 json 字符串包含一個對象,其中包含一個字符串數組。
目前我正在將 prop2 的原始 json 寫入我的表,但我正在尋找使用逗號分隔符連接 prop2 中的字符串並將其寫入表的方法。 所以保存到 prop2 列的值將是 'val1,val2'。
實現這一目標的最佳方法是什么?
我目前正在使用的一些樣板:
DECLARE @json NVARCHAR(MAX) = N'
{
"value" : [
{
"prop1" : "val",
"prop2" : ["val1","val2"]
}
]
}'
INSERT INTO dbo.mytable (prop1, prop2)
SELECT prop1, prop2
FROM OPENJSON (@json, '$.value')
WITH (
[prop1] [nvarchar](256) '$.prop1',
[prop2] [nvarchar](256) '$.prop2' AS JSON
)
謝謝!
正如評論中提到的,以非規范化格式存儲數據不是一個好主意。 但是,如果您需要解決方案,可以選擇以下語句。 只需使用OPENJSON()
和默認模式解析$.prop
JSON 數組,然后使用STRING_AGG()
聚合項目:
JSON:
DECLARE @json NVARCHAR(MAX) = N'
{
"value" : [
{
"prop1" : "val",
"prop2" : ["val1","val2"]
}
]
}'
陳述:
--INSERT INTO dbo.mytable (prop1, prop2)
SELECT j1.prop1, j2.prop2
FROM OPENJSON (@json, '$.value') WITH (
[prop1] [nvarchar](256) '$.prop1',
[prop2] [nvarchar](max) '$.prop2' AS JSON
) j1
OUTER APPLY (
SELECT STRING_AGG([value], ',') WITHIN GROUP (ORDER BY CONVERT(int, [key]))
FROM OPENJSON(j1.prop2)
) j2 (prop2)
結果:
prop1 prop2
val val1,val2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.