簡體   English   中英

TSQL Join JSON 對象數組屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM