7

我到处寻找帮助。

我对这一切都很陌生,我发现很难理解上面的所有文档。

假设我有这个 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() 方法,但我就是不明白如何使用它。

4

2 回答 2

9

尝试这样的事情:

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使用单个 XML 列调用Foot,该列将包含每个<team>XML 节点作为其值。

然后,您可以从该伪表中进行选择,并从该XML 片段中提取 XML 属性 ( @manager) 和元素 ( name, ) 的各个值,并将它们转换为您选择的类型的 T-SQL 数据值。ground<team>

要将这些值插入到您的表中 - 只需使用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
于 2012-06-24T17:18:45.293 回答
0

通过简单的 XML,您可以在 SSIS 中使用 XML 适配器。它会自动创建一个 XSD。无需编程。如果 XML 更复杂,请使用 www.eXtractor.ONE。一种非常通用的方法,可以处理每种类型的 XML。

于 2016-12-13T14:20:46.453 回答