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
Ao usar o XML Bulk Load, você deve estar familiarizado com as seguintes diretrizes e limitações:
Não há suporte para esquemas embutidos.
Se você tiver um esquema embutido no documento XML de origem, o XML Bulk Load ignorará esse esquema. Você especifica o esquema de mapeamento para XML Bulk Load externo aos dados XML. Não é possível especificar o esquema de mapeamento em um nó usando o atributo xmlns="x:schema".
Um documento XML é verificado por estar bem formado, mas não é validado.
O XML Bulk Load verifica o documento XML para determinar se ele está bem formado, ou seja, para garantir que o XML esteja em conformidade com os requisitos de sintaxe da recomendação XML 1.0 do World Wide Web Consortium. Se o documento não estiver bem formado, o XML Bulk Load cancelará o processamento e retornará um erro. A única exceção é quando o documento é um fragmento (por exemplo, o documento não tem um único elemento raiz), caso em que o XML Bulk Load carregará o documento.
O XML Bulk Load não valida o documento em relação a qualquer esquema XML-Data ou DTD definido ou referenciado no arquivo de dados XML. Além disso, o XML Bulk Load não valida o arquivo de dados XML em relação ao esquema de mapeamento fornecido.
Qualquer informação de prolog XML é ignorada.
XML Bulk Load ignora todas as informações antes e depois do <elemento raiz> no documento XML. Por exemplo, XML Bulk Load ignora quaisquer declarações XML, definições DTD internas, referências DTD externas, comentários e assim por diante.
Se você tiver um esquema de mapeamento que defina uma relação de chave primária/chave estrangeira entre duas tabelas (como entre Customer e CustOrder), a tabela com a chave primária deverá ser descrita primeiro no esquema. A tabela com a coluna de chave estrangeira deve aparecer posteriormente no esquema. A razão para isso é que a ordem na qual as tabelas são identificadas no esquema é a ordem usada para carregá-las no banco de dados. Por exemplo, o esquema XDR a seguir produzirá um erro quando for usado no XML Bulk Load porque o <elemento Order> é descrito antes do <elemento Customer> . A coluna CustomerID em CustOrder é uma coluna de chave estrangeira que se refere à coluna de chave primária CustomerID na tabela Cust.
<?xml version="1.0" ?> <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:xml:datatypes" xmlns:sql="urn:schemas-microsoft-com:xml-sql" > <ElementType name="Order" sql:relation="CustOrder" > <AttributeType name="OrderID" /> <AttributeType name="CustomerID" /> <attribute type="OrderID" /> <attribute type="CustomerID" /> </ElementType> <ElementType name="CustomerID" dt:type="int" /> <ElementType name="CompanyName" dt:type="string" /> <ElementType name="City" dt:type="string" /> <ElementType name="root" sql:is-constant="1"> <element type="Customers" /> </ElementType> <ElementType name="Customers" sql:relation="Cust" sql:overflow-field="OverflowColumn" > <element type="CustomerID" sql:field="CustomerID" /> <element type="CompanyName" sql:field="CompanyName" /> <element type="City" sql:field="City" /> <element type="Order" > <sql:relationship key-relation="Cust" key="CustomerID" foreign-key="CustomerID" foreign-relation="CustOrder" /> </element> </ElementType> </Schema>
Se o esquema não especificar colunas de estouro usando a anotação sql:overflow-field , o XML Bulk Load ignorará todos os dados presentes no documento XML, mas não descritos no esquema de mapeamento.
XML Bulk Load aplica o esquema de mapeamento que você especificou sempre que encontrar marcas conhecidas no fluxo de dados XML. Ele ignora os dados que estão presentes no documento XML, mas não são descritos no esquema. Por exemplo, suponha que você tenha um esquema de mapeamento que descreva um <elemento Customer> . O arquivo de dados XML tem uma <marca raiz AllCustomers> (que não é descrita no esquema) que inclui todos os <elementos Customer> :
<AllCustomers> <Customer>...</Customer> <Customer>...</Customer> ... </AllCustomers>
Nesse caso, o XML Bulk Load ignora o elemento AllCustomers< e começa a> mapear no <elemento Customer>. XML Bulk Load ignora os elementos que não estão descritos no esquema, mas estão presentes no documento XML.
Considere outro arquivo de dados de origem XML que contenha <elementos Order> . Esses elementos não são descritos no esquema de mapeamento:
<AllCustomers> <Customer>...</Customer> <Order> ... </Order> <Order> ... </Order> ... <Customer>...</Customer> <Order> ... </Order> <Order> ... </Order> ... ... </AllCustomers>
O XML Bulk Load ignora esses <elementos Order> . Mas se você usar a anotação sql:overflow-field no esquema para identificar uma coluna como uma coluna de estouro, o XML Bulk Load armazenará todos os dados não consumidos nesta coluna.
As seções CDATA e as referências de entidade são traduzidas para seus equivalentes de cadeia de caracteres antes de serem armazenadas no banco de dados.
Neste exemplo, uma seção CDATA encapsula o valor do <elemento City> . XML Bulk Load extrai o valor da cadeia de caracteres ("NY") antes de inserir o <elemento City> no banco de dados.
<City><![CDATA[NY]]> </City>
O XML Bulk Load não preserva referências de entidade.
Se o esquema de mapeamento especificar o valor padrão para um atributo e os dados de origem XML não contiverem esse atributo, o XML Bulk Load usará o valor padrão.
O esquema XDR de exemplo a seguir atribui um valor padrão ao atributo HireDate :
<?xml version="1.0" ?> <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:xml:datatypes" xmlns:sql="urn:schemas-microsoft-com:xml-sql" > <ElementType name="root" sql:is-constant="1"> <element type="Customers" /> </ElementType> <ElementType name="Customers" sql:relation="Cust3" > <AttributeType name="CustomerID" dt:type="int" /> <AttributeType name="HireDate" default="2000-01-01" /> <AttributeType name="Salary" /> <attribute type="CustomerID" sql:field="CustomerID" /> <attribute type="HireDate" sql:field="HireDate" /> <attribute type="Salary" sql:field="Salary" /> </ElementType> </Schema>
Nesses dados XML, o atributo HireDate está ausente do segundo <elemento Customers> . Quando o XML Bulk Load insere o segundo <elemento Customers> no banco de dados, ele usa o valor padrão especificado no esquema.
<ROOT> <Customers CustomerID="1" HireDate="1999-01-01" Salary="10000" /> <Customers CustomerID="2" Salary="10000" /> </ROOT>
A anotação sql:url-encode não é suportada:
Não é possível especificar uma URL na entrada de dados XML e esperar que o Bulk Load leia dados desse local.
As tabelas identificadas no esquema de mapeamento são criadas (o banco de dados deve existir). Se uma ou mais das tabelas já existirem no banco de dados, a propriedade SGDropTables determinará se essas tabelas preexistentes devem ser descartadas e recriadas.
Se você especificar a propriedade SchemaGen (por exemplo, SchemaGen = true), as tabelas identificadas no esquema de mapeamento serão criadas. Mas o SchemaGen não cria nenhuma restrição (como as restrições de CHAVE PRIMÁRIA/CHAVE ESTRANGEIRA) nessas tabelas, com uma exceção: Se os nós XML que constituem a chave primária em um relacionamento forem definidos como tendo um tipo XML de ID (ou seja, type="xsd:ID" para XSD) E a propriedade SGUseID estiver definida como True para SchemaGen, em seguida, não apenas as chaves primárias são criadas a partir dos nós digitados de ID, mas as relações de chave primária/chave estrangeira são criadas a partir do mapeamento de relações de esquema.
O SchemaGen não usa facetas e extensões de esquema XSD para gerar o esquema relacional do SQL Server.
Se você especificar a propriedade SchemaGen (por exemplo, SchemaGen = true) em Bulk Load, somente as tabelas (e não as exibições de nome compartilhado) especificadas serão atualizadas.
O SchemaGen fornece apenas a funcionalidade básica para gerar o esquema relacional a partir de XSD anotado. O usuário deve modificar as tabelas geradas manualmente, se necessário.
Quando existe mais de uma relação entre tabelas, o SchemaGen tenta criar uma única relação que inclua todas as chaves envolvidas entre as duas tabelas. Esta limitação pode ser a causa de um erro Transact-SQL.
Quando você está carregando dados XML em massa em um banco de dados, deve haver pelo menos um atributo ou elemento filho no esquema de mapeamento que é mapeado para uma coluna de banco de dados.
Se você estiver inserindo valores de data usando XML Bulk Load, os valores deverão ser especificados no formato (-)CCYY-MM-DD((+-)TZ). Este é o formato XSD padrão para a data.
Alguns sinalizadores de propriedade não são compatíveis com outros sinalizadores de propriedade. Por exemplo, o carregamento em massa não suporta Ignoreduplicatekeys=true juntamente com Keepidentity=false. Quando Keepidentity=false, a carga em massa espera que o servidor gere os valores de chave. As tabelas devem ter uma restrição IDENTITY na chave. O servidor não gerará chaves duplicadas, o que significa que não há necessidade de Ignoreduplicatekeys ser definido como true. Ignoreduplicatekeys deve ser definido como true somente ao carregar valores de chave primária dos dados de entrada em uma tabela que tenha linhas e haja um potencial conflito de valores de chave primária.