Introdução ao XML Bulk Load (SQLXML 4.0)
XML Bulk Load é um objeto COM autônomo que lhe permite carregar dados XML semiestruturados 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:
Esquemas XSD e XDR anotados. Para obter mais informações sobre esquemas XSD anotados, consulte Introdução a esquemas XSD anotados (SQLXML 4.0). Para obter informações sobre esquemas XDR anotados, consulte Esquemas XDR anotados (Substituídos no SQLXML 4.0).
Os mecanismos de inserção em massa do SQL Server, como a instrução Transact-SQLBULK INSERT e o utilitário bcp. Para obter mais informações, consulte BULK INSERT (Transact-SQL) e Utilitário bcp.
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ções de carregamento em massa de XML 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çã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.