Partilhar via


Introdução ao Carregamento em Massa XML (SQLXML 4.0)

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

XML Bulk Load é um objeto COM autónomo que permite carregar dados XML semiestruturados em tabelas Microsoft SQL Server.

Pode inserir dados XML numa base de dados SQL Server usando uma instrução INSERT e a função OPENXML; no entanto, a utilidade Bulk Load oferece melhor desempenho quando é necessário inserir grandes quantidades de dados XML.

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

  • Uma Definição de Esquema XML Anotada (XSD) ou esquema XML-Data Reduzido (XDR). A utilidade XML Bulk Load interpreta este esquema de mapeamento e as anotações especificadas no esquema para identificar as tabelas SQL Server nas quais os dados XML devem ser inseridos.

  • Um documento XML ou fragmento de documento (um fragmento de documento é um documento sem um único elemento de nível superior). Pode ser especificado um nome de ficheiro ou um fluxo do qual o XML Bulk Load possa ler.

O XML Bulk Load interpreta o esquema de mapeamento e identifica a(s) tabela(s) onde os dados XML devem ser inseridos.

Presume-se que está familiarizado com as seguintes funcionalidades do SQL Server:

Transmissão de Dados XML

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

Por exemplo, o seguinte documento XML de origem consiste em <elementos de Cliente> e <elementos filhos de Ordem> :

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

À medida que o XML Bulk Load lê o <elemento Cliente> , gera um registo para a Clientetable. Quando lê a <etiqueta /> Customer end, o XML Bulk Load insere esse registo na tabela no SQL Server. Da mesma forma, quando lê o <elemento Ordem> , o XML Bulk Load gera um registo para a Ordem Table e depois insere esse registo na tabela SQL Server ao ler a <etiqueta final /Ordem> .

Operações de Carregamento em Massa XML Transacionadas e Não Transacionadas

O XML Bulk Load pode operar em modo transacionado ou não transacionado. O desempenho é geralmente ótimo se estiver a carregar em massa num modo não transacionado: ou seja, a propriedade Transação está definida como FALSE) e qualquer uma das seguintes condições é verdadeira:

  • As tabelas onde os dados são carregados em massa estão vazias, sem índices.

  • As tabelas têm dados e índices únicos.

A abordagem não transacionada não garante um rollback se algo correr mal no processo de carga em massa (embora possam ocorrer rollbacks parciais). A carga em massa não transacionada é apropriada quando a base de dados está vazia. Portanto, se algo correr mal, pode limpar a base de dados e iniciar novamente o XML Bulk Load.

Observação

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

Se a propriedade Transação estiver definida para TRUE, o XML Bulk Load cria ficheiros temporários, um para cada tabela identificada no esquema de mapeamento. O XML Bulk Load armazena primeiro os registos do documento XML de origem nestes ficheiros temporários. Depois, uma Transact-SQL instrução BULK INSERT recupera estes registos dos ficheiros e armazena-os nas tabelas correspondentes. Pode especificar a localização destes ficheiros temporários usando a propriedade TempFilePath. Deve garantir que a conta SQL Server usada com o XML Bulk Load tem acesso a este caminho. Se a propriedade TempFilePath não for especificada, o caminho de ficheiro predefinido especificado na variável de ambiente TEMP é usado para criar os ficheiros temporários.

Se a propriedade Transação estiver definida como FALSE (a definição predefinida), o Carregamento em Massa XML utiliza a interface OLE DB IRowsetFastLoad para carregar os dados em massa.

Se a propriedade ConnectionString definir a cadeia de ligação, e a propriedade de Transação for definida como TRUE, o XML Bulk Load opera no seu próprio contexto de transação. (Por exemplo, o XML Bulk Load inicia a sua própria transação e faz commit ou reverte conforme apropriado.)

Se a propriedade ConnectionCommand definir a ligação com um objeto de ligação existente e a propriedade Transaction for definida como TRUE, o XML Bulk Load não emite uma instrução COMMIT ou ROLLBACK em caso de sucesso ou falha, respetivamente. Se houver um erro, o XML Bulk Load devolve a mensagem de erro apropriada. A decisão de emitir uma instrução COMMIT ou ROLLBACK fica a cargo do cliente que iniciou a carga em massa. O objeto de ligação usado para o Carregamento em Massa XML deve ser do tipo ICommand ou um objeto de comando 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 do que uma interface IRowsetFastLoad numa sessão passada.