Share via


Introdução ao XML Bulk Load (SQLXML 4.0)

XML Bulk Load é um objeto COM autônomo que lhe permite carregar dados XML semi-estruturados em tabelas do Microsoft SQL Server.

Você pode inserir dados XML em um banco de dados do SQL Server usando um comando INSERT e a função OPENXML; no entanto, o utilitário Bulk Load garante um melhor desempenho quando você precisa inserir grandes quantidades de dados XML.

O método Execute do modelo de objeto do XML Bulk Load usa dois parâmetros:

  • Um esquema XSD (XML Schema Definition) anotado ou esquema XDR (XML-Data Reduced). O utilitário XML Bulk Load interpreta esse esquema de mapeamento e as anotações especificadas no esquema ao identificar as tabelas do SQL Server nas quais os dados XML serão inseridos.

  • Um documento XML ou fragmento de documento (um documento sem elementos de alto nível). É possível especificar um nome de arquivo ou um fluxo do qual o XML Bulk Load pode ler.

O XML Bulk Load interpreta o esquema de mapeamento e identifica a tabela na qual os dados XML serão inseridos.

Pressupõe-se que você esteja familiarizado com os seguintes recursos do SQL Server:

Fluindo de dados XML

Como o documento XML de origem pode ser grande, ele não é lido na memória para o processamento do carregamento em massa. Em vez disso, o XML Bulk Load interpreta os dados XML como um fluxo e faz a leitura deles. À medida que o utilitário lê os dados, ele identifica a(s) tabela(s) de banco de dados, gera o(s) registro(s) apropriado(s) a partir da fonte de dados XML e envia o(s) registro(s) para o SQL Server para inserção.

Por exemplo, o seguinte documento XML de origem consiste em elementos <Customer> e elementos filho <Order>:

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

Como o XML Bulk Load lê o elemento <Customer>, gera um registro para a tabela Customer. Quando lê a marca final </Customer>, o XML Bulk Load insere esse registro na tabela no SQL Server. De modo semelhante, quando lê o elemento <Order>, o XML Bulk Load gera um registro para a tabela Ordere insere esse registro na tabela SQL Server após a leitura da marca final </Order>.

Operação transacionadas e não transacionadas

O XML Bulk Load pode operar no modo transacionado ou não transacionado. Em geral, o desempenho é ideal se você está carregando em massa em um modo não transacionado: ou seja, a propriedade Transaction é definida como FALSE) e uma das seguintes condições é aplicável:

  • As tabelas nas quais os dados são carregados em massa são vazias e não têm índices.

  • As tabelas têm dados e índices exclusivos.

A abordagem não transacionada não garante uma reversão se algo de errado acontecer no processo de carregamento em massa (embora reversões parciais possam ser feitas). O carregamento em massa não transacionado é apropriado quando o banco de dados está vazio. Portanto, se algo der errado, você poderá limpar o banco de dados e iniciar o XML Bulk Load novamente.

ObservaçãoObservação

No modo não transacionado, o XML Bulk Load usa uma transação interna padrão e a confirma. Quando a propriedade Transaction é definida como TRUE, o XML Bulk Load não chama a confirmação nesta transação.

Se a propriedade Transaction for definida como TRUE, o XML Bulk Load criará arquivos temporários, um para cada tabela identificada no esquema de mapeamento. O XML Bulk Load primeiro armazena os registros do documento XML de origem nesses arquivos temporários. Em seguida, uma instrução Transact-SQL BULK INSERT recupera esses registros dos arquivos e os armazena nas tabelas correspondentes. Você pode especificar o local para esses arquivos temporários usando a propriedade TempFilePath. Você deve assegurar que a conta SQL Server usada com o XML Bulk Load tenha acesso a esse caminho. Se a propriedade TempFilePath não for especificada, o caminho de arquivo padrão especificado na variável de ambiente TEMP será usado para criar os arquivos temporários.

Se a propriedade Transaction for definida como FALSE (a definição padrão), o XML Bulk Load usará a interface OLE DB IRowsetFastLoad para carregar dados em massa.

Se a propriedade ConnectionString definir a cadeia de caracteres de conexão e a propriedade Transaction for definida como TRUE, o XML Bulk Load irá operar em seu próprio contexto de transação. (Por exemplo, o XML Bulk Load inicia sua própria transação e confirma ou reverte conforme apropriado.)

Se a propriedade ConnectionCommand definir a conexão com um objeto de conexão existente e a propriedade Transaction for definida como TRUE, o XML Bulk Load não executará a instrução COMMIT ou ROLLBACK no caso de êxito ou falha, respectivamente. Caso haja um erro, o XML Bulk Load retornará a mensagem de erro apropriada. A decisão de executar uma instrução COMMIT ou ROLLBACK fica a cargo do cliente que iniciou o carregamento em massa. O objeto de conexão usado para o XML Bulk Load deveria ser do tipo ICommand ou ser um objeto de comando ADO.

No SQLXML 4.0, um ConnectionObject não pode ser usado com o conjunto de propriedades Transaction definido como FALSE. O modo não transacionado não é suportado com um ConnectionObject porque é impossível abrir mais de uma interface IRowsetFastLoad em uma sessão passada.