【问题标题】:Shredding data from XML, Importing into Relational Tables (SQL Server 2008)从 XML 分解数据,导入关系表 (SQL Server 2008)
【发布时间】:2012-06-26 02:38:22
【问题描述】:

我到处寻求帮助。

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

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

【问题讨论】:

  • 问得好,+1 让利物浦位居榜首:-)

标签: xml sql-server-2008 xquery relational


【解决方案1】:

试试这样的:

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 列,该列将包含每个&lt;team&gt; XML 节点作为其值。

然后,您可以从该伪表中进行选择,并从该&lt;team&gt; XML sn-p 中提取 XML 属性 (@manager) 和元素 (nameground) 的各个值,并将它们转换为您选择的类型的 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)我处于我将这样做的位置对于应具有不同结构的多个文档。我的目标是使用 JDBC 用 Ja​​va 编写一个应用程序,将这些不同的 XML 分解成表。我该怎么办? 2) 混合粉碎有什么好处吗?
  • (1) 取决于您是否只想将这些 XML 文档加载到 SQL Server 中并在那里切碎它们 - 或者在 Java 中预先切碎它们并插入关系结果 - 对您来说更容易。 (2) 解释 hybrid 切碎 - 你的意思是什么?
  • 据我了解,一些 XML 以其本机形式存储,而另一些则被“切碎”。再次感谢您的回答马克
  • @user1320771:猜测这取决于您是否需要返回原始 XML - 无论出于何种原因。如果是这样:您可以将该 XML 完全存储到 SQL Server XML 列中并稍后检索它。否则,我认为将 XML 与关系数据一起存储没有任何好处 - 如果需要,您始终可以创建关系数据的 XML 表示
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 2017-01-16
    相关资源
    最近更新 更多