Compartilhar via


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

Aplica-se a: SQL Server Banco de Dados SQL do Azure

O XML Bulk Load é um objeto COM autônomo que 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 uma instrução INSERT e a função OPENXML; no entanto, o utilitário Carregamento em massa fornece melhor desempenho quando você precisa inserir grandes quantidades de dados XML.

O método Execute do modelo de objeto 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.

Supõ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 as tabelas de banco de dados, gera os registros apropriados da fonte de dados XML e envia os registros 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>  
...  

À medida que o XML Bulk Load lê o <elemento Customer> , ele gera um registro para a Customertable. Quando ele lê a marca final /Customer>, o <XML Bulk Load insere esse registro na tabela no SQL Server. Da mesma forma, quando lê o elemento Order>, o< XML Bulk Load gera um registro para a Ordertable e, em seguida, insere esse registro na tabela do SQL Server ao ler a <marca /Order> end.

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. O desempenho geralmente é ideal se você estiver carregando em massa em um modo não transacionado: ou seja, a propriedade Transaction é definida como FALSE) e uma das seguintes condições é verdadeira:

  • 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 commit nessa 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 garantir que a conta do 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 estiver definida como FALSE (a configuração padrão), o XML Bulk Load usará a interface OLE DB IRowsetFastLoad para carregar os dados em massa.

Se a propriedade ConnectionString definir a cadeia de conexão e a propriedade Transaction for definida como TRUE, o XML Bulk Load 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 emitirá uma 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 carregamento em massa de XML deve ser do tipo ICommand ou ser um objeto de comando do ADO.

No SQLXML 4.0, um ConnectionObject não pode ser usado com a propriedade Transaction definida 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.