是否只有sql方法将分层表转换为一组json字符串?

时间:2011-01-05 17:12:14

标签: sql-server json

我有一个分层表,其简化版本可能如下所示:

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来完成还是有另一种方式?

2 个答案:

答案 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:一旦你习惯了游标,游标就非常有用。把它们想象成一个循环:在每一行上你都可以执行一些逻辑。