从XML分解数据,导入关系表(SQL Server 2008)
我到处找人帮忙 我对所有这些都是新手,我发现很难理解所有关于它的文档 假设我有这个XML:从XML分解数据,导入关系表(SQL Server 2008),xml,sql-server-2008,xquery,relational,Xml,Sql Server 2008,Xquery,Relational,我到处找人帮忙 我对所有这些都是新手,我发现很难理解所有关于它的文档 假设我有这个XML: <footballteams> <team manager="Benitez"> <name>Liverpool</name> <ground>Anfield</ground> </team> <team manager="Mourinho"> <name>Che
<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>
利物浦
安菲尔德球场
切尔西
斯坦福桥
兵工厂
海布里
我想从中获取数据并将其加载到名为footballsteams(name、manager、ground)的关系表中
我想在SQL Server 2008中执行此操作,从我所阅读的所有内容来看,执行此操作的一个有用方法是.nodes()方法,但我不知道如何使用它。请尝试以下操作:
DECLARE @input XML = '<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>'
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)
使用简单XML,您可以在SSIS中使用XML适配器。它会自动创建一个XSD。无需编程。如果XML更复杂,请使用www.eXtractor.ONE。这是一种非常通用的方法,可以处理每种类型的XML。非常好的回答Marc(一个参与交易的苏格兰人;))如果你不介意的话,我有几个问题。。。1) 我的位置是,我将对多个具有不同结构的文档执行此操作。我的目标是用Java编写一个应用程序,使用JDBC将这些不同的XML分解成表。我该怎么做?2) 混合切碎有什么好处吗?(1)取决于您是否只想将这些XML文档加载到SQL Server中并在那里切碎—或者在Java中预先切碎它们,然后插入关系结果—只要对您来说比较容易。(2) 解释混合切碎-这是什么意思?据我所知,有些XML是以其本机形式存储的,而有些是“切碎的”。再次感谢你的回答Marc@user1320771:我猜这取决于您是否需要返回原始XML—无论出于何种原因。如果是这样:您可以将该XML完全存储到SQLServerXML列中,并在以后检索它。否则,我看不到将XML与关系数据一起存储有任何好处—如果需要,您可以始终创建关系数据的XML表示形式—好的问题,+1表示将Liverpool放在首位:-)
;WITH ShreddedData AS
(
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)
)
INSERT INTO dbo.FootballTeams(Name, Manager, Ground)
SELECT TeamName, Manager, Ground
FROM ShreddedData