Share via


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

Aplica-se a:SQL ServerBanco de Dados SQL do Azure

O Carregamento em Massa XML é 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 SQL Server usando uma instrução INSERT e a função OPENXML; no entanto, o utilitário Bulk Load 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 de 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 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 Carregamento em Massa XML lê o <elemento Customer> , ele gera um registro para Customertable. Quando ele lê a <marca /Customer> end, o XML Bulk Load insere esse registro na tabela em SQL Server. Da mesma forma, quando ele lê o elemento Order>, o< XML Bulk Load gera um registro para o Ordertable e insere esse registro na tabela SQL Server ao ler a <marca de fim /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. 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 qualquer 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 Carregamento em Massa XML não chama commit nessa transação.

Se a propriedade Transaction estiver definida como TRUE, o Carregamento em Massa XML 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 BULK INSERT do Transact-SQL 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 de SQL Server usada com o Carregamento em Massa XML 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 estiver definida como TRUE, o Carregamento em Massa XML opera 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 estiver definida como TRUE, o Carregamento em Massa XML 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 carregamento em massa 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. Não há suporte para o modo não transacionado com um ConnectionObject porque é impossível abrir mais de uma interface IRowsetFastLoad em uma sessão passada.