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

Массовая загрузка 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>, она создает запись для таблицы Customer. Когда она доходит до закрывающего тега </Customer>, массовая загрузка XML выставляет запись в таблицу SQL Server. Аналогично при чтении элемента <Order> массовая загрузка XML создает запись для Order, а затем вставляет эту запись в таблицу SQL Server при чтении закрывающего тега </Order>.

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

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

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

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

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

ПримечаниеПримечание

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

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

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

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

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

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