Завантаження даних в форматі xml на sql server

5.3 Завантаження даних в форматі XML в базу даних SQL Server

Завантаження даних в форматі XML на SQL Server, збережена процедура sp _ xml _ preparedocument. функція OPENXML, XML for SQL Tools (SQLXML 3.0), об'єкт SQLXMLBulkLoad. завантаження даних в форматі XML на SQL Server з скрипта VBScript

Як правило, якщо у вас реалізований обмін даними в форматі XML. то необхідно не тільки вивантажувати дані в документи XML з баз SQL Server. але і завантажувати їх назад. Загальна схема виглядає так:

1) Отримуємо вміст документа XML. Це робиться за допомогою програми, що виконує завантаження. Найпростіший спосіб - написати скрипт WSH. наприклад:

2) далі - вже в тілі оболочечной збереженої процедури myProcImportXml генеруємо внутрішнє ієрархічне представлення документа XML за допомогою системної збереженої процедури sp _ xml _ preparedocument

3) далі в тій же myProcImportXml використовуємо функцію OPENXML для генерації в оперативній пам'яті ROWSET - табличного набору записів з файлу XML. За допомогою команд XPath (спеціальна мова для навігації по документах XML) можна додатково фільтрувати те, що потрапить в ROWSET.

4) далі працюємо з створеним ROWSET як зі звичайною таблицею (тільки тимчасової). Найчастіше дані звідти за допомогою INSERT вставляються в існуючі таблиці на сервері або за допомогою SELECT INTO - в автоматично створювані таблиці.

Однак на практиці таку схему використовувати практично неможливо - через обмеження, які накладаються типами даних для змінних в TSQL. У прикладах Microsoft використовуються змінні типу Varchar з максимальною довжиною 8000 байт. Звичайно ж, на практиці більшість документів XML буде більше 8 Кбайт. Тому рекомендується замість коштів TSQL використовувати програмні об'єкти, наприклад, що входять в набір XML for SQL Tools (SQLXML 3.0) - про них буде розказано нижче. Після їх установки у вас, зокрема, з'являється можливість використання програмного об'єкта SQLXMLBulkLoad. який дуже швидко і зручно вантажить дані в форматі XML на сервер. Відповідний код скрипта може виглядати так: