【问题标题】:Shredding XML from table column into a view in SQL Server将 XML 从表列分解到 SQL Server 中的视图中
【发布时间】:2012-06-30 00:43:08
【问题描述】:

我目前有这段代码,它将 XML 存储到一个名为 data 的 XML 类型列中,在一个名为 Storage 的表中。

    CREATE TABLE Storage
(
    ID INT IDENTITY(1,1) PRIMARY KEY,
    data XML NOT NULL
)

GO

INSERT INTO Storage(data) 
VALUES('<footballteams>   
    <team manager="Benitez">     
        <name>Liverpool</name>     
        <ground>Anfield</ground>   
    </team>   
    <team manager="Mourinho">     
        <name>Chelsea</name>     
        <ground>Stamford Bridge</ground>   
    </team>   
    <team manager="Wenger">     
         <name>Arsenal</name>     
         <ground>Highbury</ground>   
    </team> 
</footballteams>'); 

我想创建一个名为 Football View 的视图,它将数据分解并以以下形式显示:FootballView(TeamName,Manager,Ground)。

我之前使用 .nodes() 方法将完整文档切碎到表列中,但在创建视图时似乎更具挑战性(我有使用视图的原因)。问题是,以前我只是在变量@input 上调用了 .nodes,该变量被声明为 xml = 'xmlcontent' 但对于视图,这无法完成,我想解析存储表列中包含的 XML。

有什么想法吗?提前致谢。

编辑:

以前,如果我切碎成表格,这将是我使用的代码:

SELECT     
        TeamName = Foot.value('(name)[1]', 'varchar(100)'),     
        Manager = Foot.value('(@manager)', 'varchar(100)'),     
        Ground = Foot.value('(ground)[1]', 'varchar(100)')   
FROM     
        @input.nodes('/footballteams/team') AS Tbl(Foot)

EDIT2:这是我期望的输出。

【问题讨论】:

  • 你能把你用来分解成列的代码贴出来吗,以及你是如何尝试转换它的。
  • 你期待什么输出?
  • 将该查询放在视图中有什么问题?
  • 问题是,以前我只是在变量@input 上调用了 .nodes,该变量被声明为 xml = 'xmlcontent' 但视图无法完成,我想解析 XML包含在存储表列中。

标签: sql xml views shred


【解决方案1】:

你需要使用CROSS APPLY

SELECT     
        TeamName = Foot.value('(name)[1]', 'varchar(100)'),     
        Manager = Foot.value('(@manager)', 'varchar(100)'),     
        Ground = Foot.value('(ground)[1]', 'varchar(100)')   
FROM    
    Storage S 
        CROSS APPLY data.nodes('/footballteams/team') AS Tbl(Foot)

CROSS APPLYOUTER APPLY 允许您有效地加入当前数据集中的 XML 集合。

【讨论】:

  • 请问,cross 和 outer apply 之间的区别是,outer 也会包含 NULL 吗?
  • @user1320771 - Using APPLY 是两种形式的页面,包括差异。
猜你喜欢
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多