Поделиться через


Введение в массовую загрузку XML (SQLXML 4.0)

Область применения: SQL Server База данных SQL Azure

Массовая загрузка XML — это автономный COM-объект, который позволяет загружать полуструктурированные XML-данные в таблицы Microsoft SQL Server.

Xml-данные можно вставить в базу данных SQL Server с помощью инструкции INSERT и функции OPENXML; однако служебная программа массовой загрузки обеспечивает более высокую производительность при необходимости вставки больших объемов XML-данных.

Метод Execute объектной модели массового загрузки XML принимает два параметра:

  • Схема XSD (XML Schema definition) с заметками или схема XDR (XML-Data Reduced) с заметками. Программа массовой загрузки XML интерпретирует эту схему сопоставления и заметки, которые указаны в схеме, при идентификации таблиц SQL Server, в которые XML-данные будут вставлены.

  • XML-документ или фрагмент документа (фрагмент документа — это документ, в котором элемент верхнего уровня может быть не единственным). Может быть указано имя файла или поток, из которого массовая загрузка XML может читать.

Массовая загрузка XML интерпретирует схему сопоставления и указывает таблицу или таблицы, в которые будут вставлены XML-данные.

Предполагается, что вы знакомы со следующими функциями SQL Server:

Потоковая передача XML-данных

Так как исходный XML-документ может быть большого размера, для обработки массовой загрузки целый документ не читается в память. Вместо этого массовая загрузка XML интерпретирует XML-данные как поток и читает. Когда программа считывает данные, она определяет таблицы базы данных, создает соответствующие записи из источника XML-данных, а затем отправляет записи в SQL Server для вставки.

Например, следующий исходный XML-документ состоит из элементов Customer> и <дочерних <элементов Order:>

<Customer ...>  
    <Order.../>  
    <Order .../>  
     ...  
</Customer>  
...  

При массовой загрузке XML считывает <элемент Customer> , он создает запись для Customertable. При чтении тега </Customer> Bulk Load xml вставляет запись в таблицу в SQL Server. Таким же образом, когда он считывает элемент Order, xml Bulk Load создает запись для Ordertable>, а затем вставляет эту запись в таблицу SQL Server при чтении конечного< тега /Order>.<

Транзакционные и нетранзакционные операции массовой загрузки XML

Массовая загрузка XML может работать в транзакционном и нетранзакционном режимах. Производительность обычно оптимальна, если вы выполняете массовую загрузку в нетрансактованном режиме: то есть свойство Transaction имеет значение FALSE) и одно из следующих условий имеет значение true:

  • Таблицы, в которые происходит массовая загрузка данных, пусты и не имеют индексов.

  • Таблицы содержат данные и имеют уникальные индексы.

Нетранзакционный подход не гарантирует возможности отката, если в процессе массовой загрузки что-то пойдет не так (также могут случаться частичные откаты). Нетранзакционная массовая загрузка подходит, если база данных пуста. В этом случае, если что-то пошло не так, можно очистить базу данных и начать массовую загрузку XML заново.

Примечание.

В нетранзакционном режиме массовая загрузка XML использует вложенные внутренние транзакции по умолчанию и фиксирует их. Если для свойства Transaction задано значение TRUE, массовая загрузка XML не вызывает фиксацию для этой транзакции.

Если для свойства transaction задано значение TRUE, массовая загрузка XML создает временные файлы, по одному для каждой таблицы, определенной в схеме сопоставления. Массовая загрузка XML сначала поместит записи из исходного XML-документа в эти временные файлы. Затем инструкция Transact-SQL BULK INSERT извлекает эти записи из файлов и сохраняет их в соответствующих таблицах. Вы можете указать расположение для этих временных файлов с помощью свойства TempFilePath. Необходимо убедиться, что учетная запись SQL Server, используемая с массовой загрузкой XML, имеет доступ к этому пути. Если свойство TempFilePath не указано, для создания временных файлов используется путь к файлу по умолчанию, указанный в переменной среды TEMP.

Если для свойства Transaction задано значение FALSE (параметр по умолчанию), массовая загрузка XML использует интерфейс IRowsetFastLoad интерфейса OLE DB для массовой загрузки данных.

Если свойство ConnectionString задает строка подключения, а свойство Transaction имеет значение TRUE, xml Bulk Load работает в собственном контексте транзакции. (Например, массовая загрузка XML начинает собственную транзакцию и фиксирует изменения или при необходимости производит откат.)

Если свойство ConnectionCommand задает соединение с существующим объектом подключения, а свойство Transaction имеет значение TRUE, xml Bulk Load не выдает инструкцию COMMIT или ROLLBACK в случае успешного выполнения или сбоя соответственно. Если происходит ошибка, массовая загрузка XML возвращает соответствующее сообщение об ошибке. Решение об использовании инструкции COMMIT или ROLLBACK остается за клиентом, который инициировал массовую загрузку. Объект подключения, используемый для массовой загрузки XML, должен быть типом ICommand или объектом команды ADO.

В SQLXML 4.0 свойство ConnectionObject не может использоваться со свойством Transaction, равным FALSE. Нетрансактированные режимы не поддерживаются в ConnectionObject, так как невозможно открыть несколько интерфейсов IRowsetFastLoad на переданном сеансе.