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.
Este tópico explica como o esquema de mapeamento (XSD ou XDR) especificado em um updategram é usado para processar as atualizações. Em um updategram, você pode fornecer o nome de um esquema de mapeamento anotado a ser usado no mapeamento dos elementos e atributos no updategrama para tabelas e colunas no Microsoft SQL Server. Quando um esquema de mapeamento é especificado em um updategram, os nomes de elemento e atributo especificados no diagrama de atualização devem ser mapeados para os elementos e atributos no esquema de mapeamento.
Para especificar um esquema de mapeamento, use o mapping-schema atributo do elemento de <sincronização> . Os exemplos a seguir mostram dois updategrams: um que usa um esquema de mapeamento simples e outro que usa um esquema mais complexo.
Observação
Esta documentação pressupõe que você esteja familiarizado com modelos e suporte a esquemas 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).
Lidando com tipos de dados
Se o esquema especificar o imagetipo de dados , binaryou varbinarySQL Server (usando sql:datatype) e não especificar um tipo de dados XML, o diagrama de atualização pressupõe que o tipo de dados XML é binary base 64. Se os dados forem bin.base do tipo, você deverá especificar explicitamente o tipo (dt:type=bin.base ou type="xsd:hexBinary").
Se o esquema especificar o dateTimetipo de dados XSD ou time , datevocê também deverá especificar o tipo de dados correspondente do SQL Server usando sql:datatype="dateTime".
Ao manipular parâmetros do tipo SQL Server money , você deve especificar sql:datatype="money" explicitamente no nó apropriado no esquema de mapeamento.
Exemplos
Para criar exemplos de trabalho usando os exemplos a seguir, você deve atender aos requisitos especificados em Requisitos para executar exemplos SQLXML.
Um. Criando um updategram com um esquema de mapeamento simples
O seguinte esquema XSD (SampleSchema.xml) é um esquema de mapeamento que mapeia o <elemento Cliente> para a tabela Sales.Customer:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Customer" sql:relation="Sales.Customer" >
<xsd:complexType>
<xsd:attribute name="CustID"
sql:field="CustomerID"
type="xsd:string" />
<xsd:attribute name="RegionID"
sql:field="TerritoryID"
type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
O diagrama de atualização a seguir insere um registro na tabela Sales.Customer e depende do esquema de mapeamento anterior para mapear corretamente esses dados para a tabela. Observe que o updategram usa o mesmo nome de elemento, <Customer>, conforme definido no esquema. Isso é obrigatório porque o diagrama de atualização especifica um esquema específico.
Para testar o updategram
Copie o código de esquema acima e cole-o em um arquivo de texto. Salve o arquivo como SampleUpdateSchema.xml.
Copie o modelo de updategram abaixo e cole-o em um arquivo de texto. Salve o arquivo como SampleUpdategram.xml no mesmo diretório em que você salvou SampleUpdateSchema.xml.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram"> <updg:sync mapping-schema="SampleUpdateSchema.xml"> <updg:before> <Customer CustID="1" RegionID="1" /> </updg:before> <updg:after> <Customer CustID="1" RegionID="2" /> </updg:after> </updg:sync> </ROOT>O caminho do diretório especificado para o esquema de mapeamento (SampleUpdateSchema.xml) é relativo ao diretório em que o modelo é salvo. Também é possível especificar um caminho absoluto, por exemplo:
mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.
Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.
Esse é o esquema XDR equivalente:
<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Customer" sql:relation="Sales.Customer" >
<AttributeType name="CustID" />
<AttributeType name="RegionID" />
<attribute type="CustID" sql:field="CustomerID" />
<attribute type="RegionID" sql:field="TerritoryID" />
</ElementType>
</Schema>
B. Inserindo um registro usando a relação pai-filho especificada no esquema de mapeamento
Elementos de esquema podem estar relacionados. O <elemento sql:relationship> especifica a relação pai-filho entre os elementos de esquema. Essas informações são usadas para atualizar tabelas correspondentes que têm relação chave primária/chave estrangeira.
O seguinte esquema de mapeamento (SampleSchema.xml) consiste em dois elementos, <Order> e <OD>:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="OrderOD"
parent="Sales.SalesOrderHeader"
parent-key="SalesOrderID"
child="Sales.SalesOrderDetail"
child-key="SalesOrderID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Order" sql:relation="Sales.SalesOrderHeader" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="OD"
sql:relation="Sales.SalesOrderDetail"
sql:relationship="OrderOD" >
<xsd:complexType>
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="ProductID" type="xsd:integer" />
<xsd:attribute name="UnitPrice" type="xsd:decimal" />
<xsd:attribute name="OrderQty" type="xsd:integer" />
<xsd:attribute name="UnitPriceDiscount" type="xsd:decimal" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="OrderDate" type="xsd:date" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
O diagrama de atualização a seguir usa esse esquema XSD para adicionar um novo registro de detalhes de pedido (um <elemento OD> no bloco após>) para a< ordem 43860. O mapping-schema atributo é usado para especificar o esquema de mapeamento no updategram.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync mapping-schema="SampleUpdateSchema.xml" >
<updg:before>
<Order SalesOrderID="43860" />
</updg:before>
<updg:after>
<Order SalesOrderID="43860" >
<OD ProductID="753" UnitPrice="$10.00"
Quantity="5" Discount="0.0" />
</Order>
</updg:after>
</updg:sync>
</ROOT>
Para testar o updategram
Copie o código de esquema acima e cole-o em um arquivo de texto. Salve o arquivo como SampleUpdateSchema.xml.
Copie o modelo de updategram acima e cole-o em um arquivo de texto. Salve o arquivo como SampleUpdategram.xml no mesmo diretório em que você salvou SampleUpdateSchema.xml.
O caminho do diretório especificado para o esquema de mapeamento (SampleUpdateSchema.xml) é relativo ao diretório em que o modelo é salvo. Também é possível especificar um caminho absoluto, por exemplo:
mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.
Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.
Esse é o esquema XDR equivalente:
<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="OD" sql:relation="Sales.SalesOrderDetail" >
<AttributeType name="SalesOrderID" />
<AttributeType name="ProductID" />
<AttributeType name="UnitPrice" dt:type="fixed.14.4" />
<AttributeType name="OrderQty" />
<AttributeType name="UnitPriceDiscount" />
<attribute type="SalesOrderID" />
<attribute type="ProductID" />
<attribute type="UnitPrice" />
<attribute type="OrderQty" />
<attribute type="UnitPriceDiscount" />
</ElementType>
<ElementType name="Order" sql:relation="Sales.SalesOrderHeader" >
<AttributeType name="CustomerID" />
<AttributeType name="SalesOrderID" />
<AttributeType name="OrderDate" />
<attribute type="CustomerID" />
<attribute type="SalesOrderID" />
<attribute type="OrderDate" />
<element type="OD" >
<sql:relationship
key-relation="Sales.SalesOrderHeader"
key="SalesOrderID"
foreign-key="SalesOrderID"
foreign-relation="Sales.SalesOrderDetail" />
</element>
</ElementType>
</Schema>
C. Inserindo um registro usando a relação pai-filho e a anotação inversa especificada no esquema XSD
Este exemplo ilustra como a lógica do updategram usa a relação pai-filho especificada no XSD para processar atualizações e como a inverse anotação é usada. Para obter mais informações sobre a inverse anotação, consulte Especificando o atributo sql:inverse em sql:relationship (SQLXML 4.0).
Este exemplo pressupõe que as tabelas a seguir estão no banco de dados tempdb :
Cust (CustomerID, CompanyName), ondeCustomerIDestá a chave primáriaOrd (OrderID, CustomerID), ondeCustomerIDestá uma chave estrangeira que se refere àCustomerIDchave primária naCusttabela.
O updategram usa o seguinte esquema XSD para inserir registros nas tabelas Cust e Ord:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="OrdCust" inverse="true"
parent="Ord"
parent-key="CustomerID"
child-key="CustomerID"
child="Cust"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Order" sql:relation="Ord">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Customer" sql:relationship="OrdCust"/>
</xsd:sequence>
<xsd:attribute name="OrderID" type="xsd:int"/>
<xsd:attribute name="CustomerID" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="Customer" sql:relation="Cust">
<xsd:complexType>
<xsd:attribute name="CustomerID" type="xsd:string"/>
<xsd:attribute name="CompanyName" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
O esquema XSD neste exemplo tem <elementos Customer> e <Order> e especifica uma relação pai-filho entre os dois elementos. Ele identifica <Order> como o elemento pai e <o Cliente> como o elemento filho.
A lógica de processamento do updategram usa as informações sobre a relação pai-filho para determinar a ordem na qual os registros são inseridos em tabelas. Neste exemplo, a lógica do updategram primeiro tenta inserir um registro na tabela Ord (porque <Order> é o pai) e, em seguida, tenta inserir um registro na tabela Cust (porque <o Cliente> é o filho). No entanto, devido às informações de chave primária/chave estrangeira contidas no esquema da tabela de banco de dados, essa operação de inserção causa uma violação de chave estrangeira no banco de dados e a inserção falha.
Para instruir a lógica do updategram a reverter a relação pai-filho durante a operação de atualização, a inverse anotação é especificada no elemento de< relação>. Como resultado, os registros são adicionados primeiro na tabela Cust e, em seguida, na tabela Ord, e a operação é bem-sucedida.
O seguinte updategram insere um pedido (OrderID=2) na tabela Ord e um cliente (CustomerID='AAAAA') na tabela Cust usando o esquema XSD especificado:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync mapping-schema="SampleUpdateSchema.xml" >
<updg:before/>
<updg:after>
<Order OrderID="2" CustomerID="AAAAA" >
<Customer CustomerID="AAAAA" CompanyName="AAAAA Company" />
</Order>
</updg:after>
</updg:sync>
</ROOT>
Para testar o updategram
Crie estas tabelas no banco de dados tempdb :
USE tempdb CREATE TABLE Cust(CustomerID varchar(5) primary key, CompanyName varchar(20)) GO CREATE TABLE Ord (OrderID int primary key, CustomerID varchar(5) references Cust(CustomerID)) GOCopie o código de esquema acima e cole-o em um arquivo de texto. Salve o arquivo como SampleUpdateSchema.xml.
Copie o modelo de updategram acima e cole-o em um arquivo de texto. Salve o arquivo como SampleUpdategram.xml no mesmo diretório em que você salvou SampleUpdateSchema.xml.
O caminho do diretório especificado para o esquema de mapeamento (SampleUpdateSchema.xml) é relativo ao diretório em que o modelo é salvo. Também é possível especificar um caminho absoluto, por exemplo:
mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.
Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.