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


Введение в массовую загрузку 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-документ или фрагмент документа (document fragment - это документ, в котором элемент верхнего уровня может быть не единственным). Может быть указано имя файла или поток, из которого массовая загрузка XML может читать.

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

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

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

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

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

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

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