Compartilhar via


Introdução às Cargas em Massa de XML (SQLXML 4.0)

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 de carregamento em massa fornece melhor desempenho quando você precisa inserir grandes quantidades de dados XML.

O método Execute do modelo de objeto de carregamento em massa XML usa dois parâmetros:

  • Um esquema XSD (Definição de Esquema XML) anotado ou XDR (XML-Data Reduzido). O utilitário de carga em massa XML interpreta esse esquema de mapeamento e as anotações especificadas no esquema na identificação das tabelas do SQL Server nas quais os dados XML devem ser inseridos.

  • Um documento XML ou um fragmento de documento (um fragmento de documento é um documento sem um único elemento de nível superior). Um nome de arquivo ou um fluxo do qual o Carregamento em Massa XML pode ser lido pode ser especificado.

O XML Bulk Load interpreta o esquema de mapeamento e identifica as tabelas nas quais os dados XML devem ser inseridos.

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

Streaming de dados XML

Como o documento XML de origem pode ser grande, o documento inteiro não é lido na memória para processamento de carga em massa. Em vez disso, o Carregamento em Massa XML interpreta os dados XML como um fluxo e os lê. À 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 documento XML de origem a seguir consiste em elementos do< Cliente> e <elementos filho order>:

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

À medida que o Carregamento em Massa XML lê o <elemento Cliente> , ele gera um registro para o Customertable. Quando lê a <marca /Cliente> final, o Carregamento em Massa XML insere esse registro na tabela no SQL Server. Da mesma forma, quando lê o elemento Order>, o< Carregamento em Massa XML gera um registro para o Ordertable e insere esse registro na tabela do SQL Server ao ler a <marca de término /Order>.

Operações de carregamento em massa XML transacionadas e não transacionadas

O Carregamento em Massa XML pode operar em um 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 estão vazias sem índices.

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

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

Observação

No modo não transacionado, o Carregamento em Massa XML 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 a confirmação nessa transação.

Se a propriedade Transaction for 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 Transact-SQL BULK INSERT recupera esses registros dos arquivos e os armazena nas tabelas correspondentes. Você pode especificar o local desses arquivos temporários usando a propriedade TempFilePath. Você deve garantir que a conta do 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 for definida como FALSE (a configuração padrão), o Carregamento em Massa XML 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, a carga em massa XML operará em seu próprio contexto de transação. (Por exemplo, o Carregamento em Massa XML 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 um êxito ou uma falha, respectivamente. Se houver um erro, o Carregamento em Massa XML retornará a mensagem de erro apropriada. A decisão de emitir uma instrução COMMIT ou ROLLBACK é deixada para o cliente que iniciou a carga 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.