gpt4 book ai didi

sql - 将列内包含 JSON 数组的行扩展到多行

转载 作者:行者123 更新时间:2023-12-02 20:00:38 25 4
gpt4 key购买 nike

我遇到了 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”中

我已经检查过,有 SQL 函数可以处理 JSON(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”无效。字符串必须包含在 " 内。

Demo on db<>fiddle

关于sql - 将列内包含 JSON 数组的行扩展到多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55965621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com