如何使用T-SQL压缩递归/分层XML文件

时间:2015-10-02 13:23:52

标签: sql-server xml tsql

给出一个递归/分层格式的xml文件,如下所示:

taxonomy.xml

sortBy := []string{"-created_when", "title"}
db.C(Collection).Find(Query).Limit(limit).Sort(strings.Join(sortBy, ",")).Iter()

有没有办法使用T-SQL加载并将结构展平为表格格式,如下所示:

  • 名称
  • 深度(层次结构中的深度)

例如,上述XML的所需结果将是:

table

我写了一个小的控制台应用程序,在没有提出正确的SQL后做到这一点,但我不禁想到有一个更简单的方法。

这是一个带有xml的SQL小提琴: http://sqlfiddle.com/#!6/9eecb7/3265/0

1 个答案:

答案 0 :(得分:2)

;WITH xmlCTE
AS
(
    SELECT 
        record.query('./*') query,
        record.value('@code', 'varchar(50)') code,
        record.value('name[1]', 'varchar(50)') name,
        record.value('facet[1]', 'varchar(50)') facet,
        0 depth 
    FROM @taxonomy.nodes('/taxonomy/record') t(record)

    UNION ALL

    SELECT
        records.query('./*') query,
        records.value('@code', 'varchar(50)') code,
        records.value('name[1]', 'varchar(50)') name,
        records.value('facet[1]', 'varchar(50)') facet,
        depth + 1
    FROM xmlCTE 
        CROSS APPLY query.nodes('./record') t2(records)
)
SELECT code, name, facet, depth
FROM xmlCTE

使用SQL小提琴:http://sqlfiddle.com/#!6/9eecb7/3269/0