Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Ao usar o Carregamento em Massa XML, 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. Especifique o esquema de mapeamento para carregamento em massa XML 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, 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 Carregamento em Massa XML cancelará o processamento e retornará um erro. A única exceção a isso é quando o documento é um fragmento (por exemplo, o documento não tem nenhum elemento raiz único), nesse caso, o XML Bulk Load carregará o documento.
O Carregamento em Massa XML 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 Carregamento em Massa XML não valida o arquivo de dados XML no esquema de mapeamento fornecido.
Todas as informações de diálogo XML são ignoradas.
O Carregamento em Massa XML ignora todas as informações antes e depois do <elemento raiz> no documento XML. Por exemplo, o Carregamento em Massa XML ignora quaisquer declarações XML, definições de DTD internas, referências de DTD externas, comentários e assim por diante.
Se você tiver um esquema de mapeamento que defina uma relação 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. O motivo disso é 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 ele 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, o
sql:overflow-fieldCarregamento em Massa XML ignorará todos os dados presentes no documento XML, mas não serão descritos no esquema de mapeamento.O XML Bulk Load aplica o esquema de mapeamento especificado sempre que ele encontra 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 do< Cliente>:
<AllCustomers> <Customer>...</Customer> <Customer>...</Customer> ... </AllCustomers>Nesse caso, o Carregamento em Massa XML ignora o <elemento AllCustomers> e começa o <mapeamento no elemento Customer> . O Carregamento em Massa XML ignora os elementos que não são descritos no esquema, mas estão presentes no documento XML.
Considere outro arquivo de dados de origem XML que contém <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 Carregamento em Massa XML ignora esses <elementos Order> . Mas se você usar a
sql:overflow-fieldanotação no esquema para identificar uma coluna como uma coluna de estouro, o Carregamento em Massa XML armazenará todos os dados não armazenados 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> . O Carregamento em Massa XML extrai o valor da cadeia de caracteres ("NY") antes de inserir o <elemento City> no banco de dados.
<City><![CDATA[NY]]> </City>O Carregamento em Massa XML não preserva referências de entidade.
Se o esquema de mapeamento especificar o valor padrão de 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>Nestes 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>Não
sql:url-encodehá suporte para a anotação:Você não pode especificar uma URL na entrada de dados XML e esperar que o Carregamento em Massa leia dados desse local.
As tabelas identificadas no esquema de mapeamento são criadas (o banco de dados deve existir). Se uma ou mais tabelas já existirem no banco de dados, a propriedade SGDropTables determinará se essas tabelas pré-existentes 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 SchemaGen não cria restrições (como as restrições PRIMARY KEY/FOREIGN KEY) nessas tabelas com uma exceção: se os nós XML que constituem a chave primária em uma relação forem definidos como tendo um tipo XML de ID (ou seja,
type="xsd:ID"para XSD) E a propriedade SGUseID for definida como True para SchemaGen, em seguida, não apenas as chaves primárias são criadas a partir dos nós digitado pela ID, mas as relações chave primária/chave estrangeira são criadas a partir de relações de esquema de mapeamento.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) no Carregamento em Massa, somente tabelas (e não exibições de nome compartilhado) especificadas serão atualizadas.
SchemaGen fornece apenas 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.
Em que mais do que a relação existe entre tabelas, SchemaGen tenta criar uma única relação que inclua todas as chaves envolvidas entre as duas tabelas. Essa limitação pode ser a causa de um erro de Transact-SQL.
Quando você estiver carregando dados XML em massa em um banco de dados, deve haver pelo menos um atributo ou elemento filho no esquema de mapeamento mapeado para uma coluna de banco de dados.
Se você estiver inserindo valores de data usando o Carregamento em Massa XML, 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, a carga em massa não dá suporte
Ignoreduplicatekeys=trueem conjunto comKeepidentity=false. QuandoKeepidentity=false, a carga em massa espera que o servidor gere os valores de chave. As tabelas devem ter uma restriçãoIDENTITYna chave. O servidor não gerará chaves duplicadas, o que significa que não há necessidade de ser definido comoIgnoreduplicatekeystrue.Ignoreduplicatekeysdeve ser definidotrueapenas ao carregar valores de chave primária dos dados de entrada em uma tabela que tem linhas e há um potencial para conflito de valores de chave primária.