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


Общие сведения о массовой загрузке XML (SQLXML 4.0)

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

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

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

  • Аннотированное определение схемы XML (XSD) или XML-Data сокращенная (XDR) схема. Программа массовой загрузки 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-документа в этих временных файлах. Затем инструкция BULK INSERT Transact-SQL извлекает эти записи из файлов и сохраняет их в соответствующих таблицах. Вы можете указать расположение для этих временных файлов с помощью свойства 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 на переданном сеансе.