Introdução aos diagramas de atualização (SQLXML 4.0)
Aplica-se a: SQL Server Banco de Dados SQL do Azure
Você pode modificar (inserir, atualizar ou excluir) um banco de dados no Microsoft SQL Server a partir de um documento XML existente usando um updategram ou a função OPENXML Transact-SQL.
A função OPENXML modifica um banco de dados fragmentando o documento XML existente e fornecendo um conjunto de linhas que pode ser passado para uma instrução INSERT, UPDATE ou DELETE. Com OPENXML, as operações são executadas diretamente nas tabelas de banco de dados. Portanto, OPENXML é especialmente apropriada nos casos em que provedores de conjuntos de linhas, como uma tabela, possam aparecer como uma origem.
Da mesma forma que a OPENXML, um diagrama de atualização permite inserir, atualizar ou excluir dados no banco de dados. Entretanto, ele trabalha nas exibições em XML fornecidas pelo esquema XSD (ou um XDR) anotado; por exemplo, as atualizações são aplicadas à exibição em XML fornecida pelo esquema de mapeamento. O esquema de mapeamento, por sua vez, tem as informações necessárias para mapear elementos e atributos XML para as tabelas e colunas de bancos de dados correspondentes. O diagrama de atualização usa estas informações de mapeamento para atualizar as tabelas e colunas de bancos de dados.
Observação
Esta documentação pressupõe que você esteja familiarizado com modelos e suporte a esquema de mapeamento no SQL Server. Para obter mais informações, consulte Introdução aos esquemas XSD anotados (SQLXML 4.0). Para aplicativos herdados que usam XDR, consulte Esquemas XDR anotados (preteridos no SQLXML 4.0).
Namespaces necessários no diagrama de atualização
As palavras-chave em um updategram, como <sync>, <antes> e< depois>, existem no namespace urn:schemas-microsoft-com:xml-updategram. O prefixo de namespace utilizado é arbitrário. Nesta documentação, o prefixo updg denota o namespace updategram .
Revisando a sintaxe
Um updategram é um modelo com <blocos sync>, <before> e< after> que formam a sintaxe do updategram. O seguinte código mostra esta sintaxe em sua forma mais simples:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync [mapping-schema= "AnnotatedSchemaFile.xml"] >
<updg:before>
...
</updg:before>
<updg:after>
...
</updg:after>
</updg:sync>
</ROOT>
As seguintes definições descrevem a função de cada um destes blocos:
<antes>
Identifica o estado existente (também chamado de "o estado antes") da instância de registro.
<depois>
Identifica o estado novo para o qual dados devem ser alterados.
<sync>
Contém os blocos antes> e <depois>.< Um bloco de sincronização> pode conter mais de um conjunto de< blocos antes> e <depois>.< Se houver mais de um conjunto de <blocos antes> e <depois> , esses blocos (mesmo que estejam vazios) devem ser especificados como pares. Além disso, um updategram pode ter mais de um bloco de sincronização>.< Cada <bloco de sincronização> é uma unidade de transação (o que significa que tudo no <bloco de sincronização> é feito ou nada é feito). Se você especificar vários <blocos de sincronização> em um updategram, a falha de um< bloco de sincronização> não afetará os outros <blocos de sincronização.>
Se um updategram exclui, insere ou atualiza uma instância de registro depende do conteúdo dos blocos antes> e <depois>:<
Se uma instância de registro aparecer apenas no <bloco anterior> sem nenhuma instância correspondente no< bloco depois>, o updategram executará uma operação de exclusão.
Se uma instância de registro aparecer somente no <bloco after> sem nenhuma instância correspondente no< bloco before, será uma operação de> inserção.
Se uma instância de <registro aparecer no bloco anterior> e tiver uma instância correspondente no <bloco posterior>, será uma operação de atualização. Nesse caso, o updategram atualiza a instância de registro para os valores especificados no bloco after>.<
Especificando um esquema de mapeamento no diagrama de atualização
Em um diagrama de atualização, a abstração XML que é fornecida por um esquema de mapeamento (é dado suporte a esquemas XSD e também XDR) pode ser implícita ou explícita (ou seja, um diagrama de atualização pode funcionar com ou sem um esquema de mapeamento especificado). Se você não especificar um esquema de mapeamento, o updategram assumirá um mapeamento implícito (o mapeamento padrão), em que cada elemento no bloco anterior> ou <posterior> é mapeado para uma tabela e o <elemento filho ou atributo de cada elemento é mapeado para uma coluna no banco de dados. Se você especificar explicitamente um esquema de mapeamento, os elementos e atributos no diagrama de atualização deverão corresponder aos elementos e atributos no esquema de mapeamento.
Mapeamento implícito (padrão)
Na maioria dos casos, um diagrama de atualização que executa atualizações simples pode não precisar de um esquema de mapeamento. Neste caso, o diagrama de atualização se baseia no esquema de mapeamento padrão.
O seguinte diagrama de atualização demonstra o mapeamento implícito. Neste exemplo, o diagrama de atualização insere um novo cliente na tabela Sales.Customer. Como esse updategram usa mapeamento implícito, o elemento Sales.Customer> é mapeado <para a tabela Sales.Customer e os atributos CustomerID e SalesPersonID são mapeados para as colunas correspondentes na tabela Sales.Customer.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync >
<updg:before>
</updg:before>
<updg:after>
<Sales.Customer CustomerID="1" SalesPersonID="277" />
</updg:after>
</updg:sync>
</ROOT>
Mapeamento explícito
Se você especificar um esquema de mapeamento (XSD ou XDR), o diagrama de atualização usará o esquema para determinar as tabelas e colunas do banco de dados que deverão ser atualizados.
Se o updategram executar uma atualização complexa (por exemplo, inserir registros em várias tabelas com base na relação pai-filho especificada no esquema de mapeamento), você deverá fornecer explicitamente o esquema de mapeamento usando o atributo mapping-schema no qual o updategram é executado.
Como um diagrama de atualização é um modelo, o caminho especificado para o esquema de mapeamento no diagrama de atualização é relativo ao local do arquivo do modelo (relativo ao local onde o diagrama de atualização está armazenado). Para obter mais informações, consulte Especificando um esquema de mapeamento anotado em um Updategram (SQLXML 4.0).
Mapeamento centrado em elemento e mapeamento centrado em atributo em diagramas de atualização
Com o mapeamento padrão (quando o esquema de mapeamento não for especificado no diagrama de atualização), os elementos do diagrama de atualização são mapeados para tabelas e os elementos-filho (no caso do mapeamento centrado em elementos) e os atributos (no caso do mapeamento centrado em atributos) são mapeados para colunas.
Mapeamento centrado em elemento
Em um diagrama de atualização centrado em elemento, um elemento contém elementos filhos que denotam as propriedades do elemento. Como um exemplo, consulte o seguinte diagrama de atualização. O elemento Person.Contact> contém os< elementos filho FirstName> e< LastName>.< Esses elementos filho são propriedades do elemento Person.Contact>.<
Como esse updategram não especifica um esquema de mapeamento, o updategram usa o mapeamento implícito, em que o <elemento Person.Contact> é mapeado para a tabela Person.Contact e seus elementos filho são mapeados para as colunas FirstName e LastName.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync >
<updg:after>
<Person.Contact>
<FirstName>Catherine</FirstName>
<LastName>Abel</LastName>
</Person.Contact>
</updg:after>
</updg:sync>
</ROOT>
mapeamento centrado em atributo
Em um mapeamento centrado em atributo, os elementos têm atributos. O seguinte diagrama de atualização usa mapeamento centrado em atributo. Neste exemplo, o elemento Person.Contact> consiste nos atributos FirstName e LastName.< Esses atributos são as propriedades do elemento Person.Contact>.< Como no exemplo anterior, esse updategram não especifica nenhum esquema de mapeamento, portanto, ele depende do mapeamento implícito para mapear o <elemento Person.Contact> para a tabela Person.Contact e os atributos do elemento para as respectivas colunas na tabela.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync >
<updg:before>
</updg:before>
<updg:after>
<Person.Contact FirstName="Catherine" LastName="Abel" />
</updg:after>
</updg:sync>
</ROOT>
Usando o mapeamento centrado em elemento e centrado em atributo
Você pode especificar uma mistura de mapeamento centrado em elemento e mapeamento centrado em atributo, conforme mostrado no seguinte diagrama de atualização. Observe que o <elemento Person.Contact> contém um atributo e um elemento filho. Além disso, este diagrama de atualização se baseia em mapeamento implícito. Assim, o atributo FirstName e o <elemento filho LastName> são mapeados para as colunas correspondentes na tabela Person.Contact.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync >
<updg:before>
</updg:before>
<updg:after>
<Person.Contact FirstName="Catherine" >
<LastName>Abel</LastName>
</Person.Contact>
</updg:after>
</updg:sync>
</ROOT>
Trabalhando com caracteres válidos no SQL Server, mas não válidos em XML
No SQL Server, os nomes de tabela podem incluir um espaço. Porém, este tipo de nome de tabela não é válido em XML.
Para codificar caracteres que são identificadores válidos do SQL Server, mas não são identificadores XML válidos, use '__xHHHH__' como o valor de codificação, em que HHHH representa o código UCS-2 hexadecimal de quatro dígitos para o caractere na ordem de bits mais significativa. Usando esse esquema de codificação, um caractere de espaço é substituído por x0020 (o código hexadecimal de quatro dígitos para um caractere de espaço); assim, o nome da tabela [Detalhes do Pedido] no SQL Server torna-se _x005B_Order_x0020_Details_x005D_ em XML.
Da mesma forma, pode ser necessário especificar nomes de elementos de três partes, como <[database].[ proprietário]. [tabela]>. Como os caracteres de colchetes ([ e ]) não são válidos em XML, você deve especificá-los como <_x005B_database_x005D_._x005B_owner_x005D_._x005B_table_x005D_>, em que _x005B_ é a codificação do colchete esquerdo ([) e _x005D_ é a codificação do colchete direito (]).
Executando diagramas de atualização
Como um diagrama de atualização é um modelo, todos os mecanismos de processamento de um modelo se aplicam ao diagrama de atualização. Para SQLXML 4.0, você pode executar um diagrama de atualização em qualquer um dos seguintes modos:
Enviando-o em um comando ADO.
Enviando-o como um comando OLE DB.
Confira também
Considerações sobre segurança para diagramas de atualização (SQLXML 4.0)