【发布时间】:2021-11-04 15:40:32
【问题描述】:
我知道有很多关于将 JSON 对象解析为多行的问题 - 但我正在处理一个不包含实际 JSON 的列,而是一个已经从 JSON 数组中预提取的字符串。
我的桌子是这样的:
| ID | Group_ID |
|---|---|
| 1234 | ["abc"] |
| 5678 | ["def","hij"] |
| 9999 | ["klm","nop","qrs"] |
每个 Group_ID 可以包含无限数量的值(每个值都用引号括起来)
如何将上表转换成这样的形式(每个 Group_ID 都有自己的行):
| ID | Group_ID |
|---|---|
| 1234 | abc |
| 5678 | def |
| 5678 | hij |
| 9999 | klm |
| 9999 | nop |
| 9999 | qrs |
【问题讨论】:
-
希望这里的目的是真正修复您现在遇到的损坏的架构,而不仅仅是尝试在更大的应用程序中处理数据。
-
@JoelCoehoorn - 很好奇你的意思是什么......你只是说最好的选择是在数据进入 SQL 服务器之前对其进行解析?这些数据来自 REST API,并且在某些 ETL 作业期间以这种格式插入到 SQL 中,但理论上我可以修改那些 ETL 作业,但我的想法是如果 SQL 可以处理它,为什么不采取阻力最小的路径......
-
是的,你应该在插入之前解析它。如果这是给定的,我并不完全反对在某些情况下将 json 数据存储在数据库中,但是您应该围绕您可能需要查询的任何内容定义架构,并在插入时从 json 中提取这些字段。此外,将数组数据以任何格式存储在单个字段中几乎从不是个好主意。
标签: tsql sql-server-2016 cross-apply