我目前有这个代码,它将XML存储在一个名为Storage的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>');
Run Code Online (Sandbox Code Playgroud)
我想创建一个名为Football View的视图,它将数据分解并以表格形式显示:FootballView(TeamName,Manager,Ground).
我之前使用.nodes()方法将完整文档粉碎成表格列,但在创建视图时似乎更具挑战性(我有使用视图的理由).问题是之前我刚刚在一个变量@input上调用了.nodes,它是DECLARE,因为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)
Run Code Online (Sandbox Code Playgroud)
EDIT2:这是我期望的输出.

Cod*_*ian 10
你需要使用 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)
Run Code Online (Sandbox Code Playgroud)
CROSS APPLY并OUTER APPLY允许您有效地加入当前数据集中的XML集合.
| 归档时间: |
|
| 查看次数: |
7146 次 |
| 最近记录: |