У меня есть структура XML, подобная следующей:
<tables>
<table name="tableName1">
<row ID="34" col1="data" col2="dom" />
<row ID="35" col1="data2" col2="dom2" />
</table>
<table name="tableName2">
<row ID="1" col1="data" col2="dom" col3="item1" />
<row ID="3" col1="data2" col2="dom2" col3="item2" />
<row ID="7" col1="data4" col3="item3" />
</table>
...
<tables>
В основном узлы таблицы содержат данные RAW, созданные путем выбора FOR XML RAW
.
Теперь я хочу сделать обратное: прочитать XML и вставить данные в соответствующие таблицы базы данных SQL Server 2008 R2. Однако я хочу, чтобы процесс загрузки был устойчивым, то есть я не хочу связываться с именами столбцов и таблиц, если они изменятся в будущем. Мне нужен процесс для чтения имен таблиц из @name
атрибутов узлов таблицы и вставки данных в столбцы, заданные атрибутами в <Row>
узлах. Я подумал о хранимой процедуре, которая получает XML в качестве входных данных и делает все остальное.
Количество данных составляет ок. 70 таблиц от 10 до 30 000 строк, всего не более 100 000 строк. Мне нужно сделать это максимально эффективно, лучше всего будет массовая загрузка.
Процесс не должен заботиться о внешних ключах, так как порядок таблиц внутри XML построен так, что ограничения FK могут сохраняться при загрузке одной таблицы за другой.
Однако в каждой таблице есть столбцы идентификаторов, поэтому я должен сделать
SET Identity_Insert ON and SET Identity_Insert OFF
до и после обработки каждой таблицы. Мне также нужно повторно заполнить каждую таблицу после вставки всех строк. О, и мне нужно сделать весь шебанг в транзакции, чтобы я мог откатиться, если что-то пойдет не так.
В какую сторону вы предлагаете мне пойти: мне остаться с T-SQL или попытаться написать SP в CLR SQL? Должен ли я использовать XQuery или использовать метод массовой вставки?
Спасибо за помощь!