从XML碎化数据,导入关系表(SQL Server 2008)

时间:2012-06-24 16:34:49

标签: xml sql-server-2008 xquery relational

我到处都寻求帮助。

我是这一切的新手,我发现很难理解它上面的所有文档。

说我有这个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()方法,但我只是无法理解如何使用它。

2 个答案:

答案 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。