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