Измельчение данных из 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.
