Ознакомьтесь с серией из трех частей по SQL XML за 15 секунд: http://www.15seconds.com/Issue/050803.htm.
Я бы лично использовал функции SQL XQuery, чтобы разделить ваш XML на части и сохранить их в SQL Server.
Если у вас есть что-то вроде:
<data>
<person>
<name>Jones</name>
<firstname>Peter</firstname>
</person>
<person>
<name>Smith</name>
<firstname>Frank</firstname>
</person>
<data>
Вы можете написать что-то вроде:
SELECT
Data.Person.value('(name)[1]', 'varchar(20)') as 'Name',
Data.Person.value('(firstname)[1]', 'varchar(20)') as 'First Name'
FROM
@XmlVar.nodes('/data/person') As Data(Person)
Таким образом, в основном, функция .nodes
уничтожает ваш XML в «псевдотаблица» Data.Person
- каждая запись <person>
становится одной строкой в таблице.
С помощью функции .value()
вы можете извлекать отдельные значения из этих уничтоженных узлов XML. Теперь у вас есть куча полей varchar (20), например, вставлен в таблицу.
Этот метод хорошо работает, если ваш XML довольно маленький (несколько сотен записей). Если у вас есть огромные XML-файлы, вы можете изучить другие методы, такие как XML Bulkload .