Измельчение данных из XML, импорт в реляционные таблицы (SQL Server 2008)

Я везде искал помощь.

Я новичок во всем этом, и мне трудно понять всю документацию по нему.

скажем, у меня есть этот 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 (имя,менеджер,земля).

Я хотел бы сделать это в SQL Server 2008, и из того, что я прочитал везде, полезный метод для этого .метод nodes (), но я просто не могу поймите, как его использовать.

2 ответов


попробуйте что-то вроде этого:

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 (@manager) и элементы (name, ground) от <team> XML-фрагмент и преобразует их в значение данных 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

с помощью простого XML вы можете использовать адаптер XML в службах SSIS. Он автоматически создает XSD. Нет необходимости в программировании. Если XML является более сложным, используйте www.добытчик.ОДИН. Очень общий метод, который обрабатывает каждый тип XML.