我到处都寻求帮助。
我是这一切的新手,我发现很难理解它上面的所有文档。
说我有这个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>
我想从中获取数据并将其加载到名为footballteams(name,manager,ground)的关系表中。
我想在SQL Server 2008中这样做,从我到处读到的一个有用的方法是.nodes()方法,但我只是无法理解如何使用它。
答案 0 :(得分:8)
尝试这样的事情:
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)
基本上,对.nodes()
的调用会创建一个名为Tbl
的伪“表”,其中包含一个名为Foot
的XML列,其中包含每个<team>
XML节点作为其值
然后,您可以从该伪表中进行选择,并从该@manager
XML中提取XML属性(name
)和元素(ground
,<team>
)的各个值片段,并将它们转换为您的选择类型的T-SQL数据值。
要将这些值插入表格 - 只需使用基于此的INSERT
语句:
;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
答案 1 :(得分:0)
使用简单的XML,您可以在SSIS中使用XML适配器。它会自动创建一个XSD。无需编程。如果XML更复杂,请使用www.eXtractor.ONE。一种非常通用的方法,可以处理每种类型的XML。