簡體   English   中英

將一列中帶有JSON數組的行擴展為多行

[英]Expand row with an JSON Array inside a Column to multiple rows

我遇到了SQL數據遷移(SQL Server)問題,希望您可以向正確的方向指導。

假設,我們有帶有以下列的表DataTable (名稱簡化):

DataID | SomeForeignKey | SpecificDataValues | OtherSpecificDataValues
int    | int            | String             | String
-------+----------------+--------------------+------------------------
0      | 1              | ['1','2']          | ['1', '2']

其中SpecificDataValuesOtherSpecificDataValues是JSON數組(例如['1', '2']

現在,我想將此表(最好使用SQL遷移腳本)遷移到新表:

DataValuesTable
DataID | SomeForeignKey | SpecificDataValues | OtherSpecificDataValues
-------+----------------+--------------------+------------------------
0      | 1              | 1                  | 1
1      | 1              | 2                  | 2

所以,我基本上想在新表中為每個值生成一個新行,存儲在“ SpecificDataValues”和“ OtherSpecificDataValues”中

我已經檢查過,有可以使用JSON的SQL函數(OPENJSON,JSON_QUERY),但是我無法使用此工具產生所需的結果。

希望您能告訴我正確的方向。

一種解決方案是兩次使用OPENJSON 它將生成Array(2)x Array(2)= 4行,您感興趣的是索引位置匹配的行:

SELECT DataID, SomeForeignKey, j1.value, j2.value
FROM t
CROSS APPLY OPENJSON(SpecificDataValues) AS j1
CROSS APPLY OPENJSON(OtherSpecificDataValues) AS j2
WHERE j1.[key] = j2.[key]

另一個解決方案是一起使用OPENJSONJSON_VALUE

SELECT DataID, SomeForeignKey, j1.value, JSON_VALUE(OtherSpecificDataValues, CONCAT('$[', CAST(j1.[key] AS INT), ']'))
FROM t
CROSS APPLY OPENJSON(SpecificDataValues) AS j1

請注意,您的“ JSON”無效。 字符串必須包含在"

db <> fiddle上的演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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