我有一个分层表,其简化版本可能如下所示:
id parentid text
-- -------- ----
1 null A
2 1 Ax
3 1 Ay
4 3 Ay2
5 null B
6 5 Bx
我想以json格式迁移此表中的所有数据。上表的结果应该看起来像:
{
"text":"A",
"children":
[
{
"text":"Ax",
"children":[]
},
{
"text":"Ay",
"children":
[
{
"text":"Ay2",
"children":[]
}
]
}
]
}
(下一条记录)
{
"text":"B",
"children":
[
{
"text":"Bx",
"children":[]
}
]
}
这个表有几十万个记录,我无法真正假设它有多深,因为在我最终运行之前它可能会发生变化。我考虑使用WITH来尝试连接子记录,但我真的很挣扎。这可以用WITH来完成还是有另一种方式?
答案 0 :(得分:2)
最后,我使用了一个带有游标的递归sql函数,该游标连接每个递归调用的结果。另一个sql函数转义进入json的字符串,以确保那里没有令人讨厌的字符。
最后一项功能基于以上评论中提供的链接@Martin中的一些代码:http://www.simple-talk.com/sql/t-sql-programming/consuming-json-strings-in-sql-server/
我通常远离游标,但由于这是一个数据迁移脚本,它证明了最简单的前进方式
答案 1 :(得分:0)
在SQL中执行此类事情有点困难,因为它期望返回一组行(即:网格或表格)。如果您使用的是PL / SQL或sql中内置的其他过程语言,您可以近似它,但最好的解决方案是从脚本或其他代码中调用SQL语句,就像您一样。
PS:一旦你习惯了游标,游标就非常有用。把它们想象成一个循环:在每一行上你都可以执行一些逻辑。