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


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

Применимо к:База данных SQL ServerAzure SQL

Массовая загрузка 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> end массовая загрузка 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 работает в собственном контексте транзакции. (Например, массовая загрузка XML начинает собственную транзакцию и фиксирует изменения или при необходимости производит откат.)

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

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