Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco 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:
Esquemas XSD e XDR anotados. Para mais informações sobre esquemas XSD anotados, consulte Introdução aos Esquemas XSD Anotados (SQLXML 4.0). Para informações sobre esquemas XDR anotados, consulte Annotated XDR Schemas (Descontinuados no SQLXML 4.0).
Mecanismos de inserção em massa do SQL Server, como a instrução Transact-SQL BULK INSERT e a utilidade bcp. Para mais informações, veja BULK INSERT (Transact-SQL) e bcp Utility.
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.