Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从XML分解数据,导入关系表(SQL Server 2008)_Xml_Sql Server 2008_Xquery_Relational - Fatal编程技术网

从XML分解数据,导入关系表(SQL Server 2008)

从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

我到处找人帮忙

我对所有这些都是新手,我发现很难理解所有关于它的文档

假设我有这个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>

利物浦
安菲尔德球场
切尔西
斯坦福桥
兵工厂
海布里
我想从中获取数据并将其加载到名为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