将表列中的XML分解为SQL Server中的视图
问题描述:
我目前有一个将XML存储到名为“存储”的表中的称为数据的XML类型列中的代码。将表列中的XML分解为SQL Server中的视图
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>');
我想创建一个名为足球查看视图,其撕碎在表单中的数据并显示:FootballView(TeamName,经理,地)。
我已经使用.nodes()方法将表单中的所有文档全部分解成了表格列,但是在创建视图时(我有我使用视图的原因)它似乎更具挑战性。问题是,以前我只是调用了一个变量@input,其中的变量@input被声明为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:这是我所期望的输出。
答
您需要使用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 APPLY
和OUTER APPLY
让你有效地加入到XML的集合中的当前数据集。
您可以将用于碎化的代码发布到列中,还可以将其转换成如何转换。 –
请参阅上面的修改。 – themenace92
你期待什么输出? – Kane