[英]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']
其中SpecificDataValues
和OtherSpecificDataValues
是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]
另一個解決方案是一起使用OPENJSON
和JSON_VALUE
:
SELECT DataID, SomeForeignKey, j1.value, JSON_VALUE(OtherSpecificDataValues, CONCAT('$[', CAST(j1.[key] AS INT), ']'))
FROM t
CROSS APPLY OPENJSON(SpecificDataValues) AS j1
請注意,您的“ JSON”無效。 字符串必須包含在"
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.