Udostępnij za pośrednictwem


Określanie adnotacjami schematu mapowanie w diagramach aktualizacji (SQLXML 4.0)

W tym temacie wyjaśniono, jak mapowanie schematu (XSD) lub XDR) określonego w diagramach aktualizacji jest używany do przetwarzania aktualizacji.In an updategram, you can provide the name of an annotated mapping schema to use in mapping the elements and attributes in the updategram to tables and columns in Microsoft SQL Server.Po określeniu w diagramach aktualizacji schematu mapowania nazw elementów i atrybut, które są określone w diagramach aktualizacji musi być mapowana na elementy i atrybuty w schemacie mapowania.

Mapowanie schematu, możesz użyć mapping-schema atrybut <sync> elementu.Następujące przykłady przedstawiają dwa updategrams: korzystającą schematu mapowania proste i o bardziej złożonych schematu.

Ostrzeżenie

Dokumentacja ta zakłada, że czytelnik jest obeznany z szablonów i mapowanie obsługa schematów w SQL Server.Aby uzyskać więcej informacji, zobacz Wprowadzenie do adnotacjami schematów XSD (SQLXML 4.0).W przypadku starszych aplikacji, które używają XDR, zobacz Adnotacjami schematy XDR (zaniechane w SQLXML 4.0).

Zajmujących się typy danych

If the schema specifies the image, binary, or varbinary SQL Server data type (by using sql:datatype) and does not specify an XML data type, the updategram assumes that the XML data type is binary base 64.Jeśli dane są bin.base typu, należy jawnie określić typ (dt:type=bin.base lub type="xsd:hexBinary").

Jeśli schemat określa dateTime, date, lub time Typ danych XSD, należy także określić odpowiednie SQL Server typu danych przy użyciu sql:datatype="dateTime".

When handling parameters of SQL Server money type, you must explicitly specify sql:datatype="money" on the appropriate node in the mapping schema.

Przykłady

Aby utworzyć próbki pracy przy użyciu poniższych przykładach, muszą spełniać wymagania określone w Wymagania dotyczące uruchamianie przykładów SQLXML.

A.Tworzenie wierzchołki ze schematem mapowania proste

Następującego schematu XSD (SampleSchema.xml) jest schematem mapowania, która mapuje <klienta> element w 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>

Następujące wierzchołki wstawia rekordu do tabela Sales.Customer i opiera się na poprzedni schemat mapowanie poprawnie mapowania danych do tabela.Powiadomienie, że wierzchołki używa tej samej nazwy elementu <klienta>, jak zdefiniowano w schemacie.Jest to obowiązkowe, ponieważ wierzchołki określa określonego schematu.

Aby przetestować wierzchołki

  1. Kod schematu skopiować i wkleić go do pliku tekstowego.Zapisz plik jako SampleUpdateSchema.xml.

  2. Szablonu wierzchołki poniżej skopiować i wkleić go do pliku tekstowego.Zapisz plik jako SampleUpdategram.xml w tym samym katalogu, w którym zapisano 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>
    

    Ścieżka katalogu określonego dla mapowania schematu (SampleUpdateSchema.xml) jest katalog, w którym zapisany szablon.Ścieżka bezwzględna również można określić, na przykład:

    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"
    
  3. Tworzenie i używanie szablon wykonać skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).

    Aby uzyskać więcej informacji, zobacz Przy użyciu ADO SQLXML wykonanie kwerendy 4.0.

Jest to równoważne schematu XDR:

<?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.Wstawienie rekordu za pomocą relacji nadrzędny podrzędność, określona w schemacie mapowania

Może być powiązane elementy schematu.<Sql:relationship> element określa relację nadrzędny podrzędność między elementy schematu.Informacje te są używane do aktualizacji odpowiednie tabele, które mają podstawowe klucz/relacja klucza obcego.

Następującego schematu mapowania (SampleSchema.xml) składa się z dwóch elementów, <zamówienia> i <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>

Następujące wierzchołki używa tego schematu XSD, aby dodać nowy rekord szczegółów zamówienia ( <OD> element <after> blok) dla zamówienia 43860.mapping-schema Atrybut jest używany do określenia schematu mapowanie w diagramach aktualizacji.

<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>

Aby przetestować wierzchołki

  1. Kod schematu skopiować i wkleić go do pliku tekstowego.Zapisz plik jako SampleUpdateSchema.xml.

  2. Skopiuj szablon wierzchołki powyżej i wkleić go do pliku tekstowego.Zapisz plik jako SampleUpdategram.xml w tym samym katalogu, w którym zapisano SampleUpdateSchema.xml.

    Ścieżka katalogu określonego dla mapowania schematu (SampleUpdateSchema.xml) jest katalog, w którym zapisany szablon.Ścieżka bezwzględna również można określić, na przykład:

    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"
    
  3. Tworzenie i używanie szablon wykonać skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).

    Aby uzyskać więcej informacji, zobacz Przy użyciu ADO SQLXML wykonanie kwerendy 4.0.

Jest to równoważne schematu XDR:

<?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.Wstawienie rekordu za pomocą adnotacji relacji i odwrotności nadrzędny podrzędność określonego w schematu XSD

Ten przykład ilustruje, jak logika wierzchołki używa relacji nadrzędny podrzędność, określone w pliku XSD w celu przetwarzania aktualizacji i jak inverse używane adnotacji.Więcej informacji o inverse adnotacji, zobacz Określanie atrybutu sql:inverse na sql:relationship (SQLXML 4.0).

W tym przykładzie założono, że następujące tabele znajdują się w tempdb bazy danych:

  • Cust (CustomerID, CompanyName), gdzie CustomerID jest klucz podstawowy

  • Ord (OrderID, CustomerID), gdzie CustomerID jest klucz obcy odwołujący się do CustomerID klucz podstawowy w Cust tabela.

Wierzchołki używa następującego schematu XSD do wstawiania rekordów do tabel Nabywca i nika:

<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>

Schematu XSD w tym przykładzie ma <klienta> i <zamówienia> elementów i określa relację nadrzędny podrzędność między dwa elementy.Identyfikuje <zamówienia> jako elementu nadrzędnego i <klienta> jako element podrzędność.

Wierzchołki przetwarzanie logiki wykorzystuje informacje o relacji nadrzędny podrzędność, aby określić kolejność, w którym rekordy są wstawiane do tabeli.W tym przykładzie logiki wierzchołki najpierw próbuje wstawić rekord do tabela nika (ponieważ <zamówienia> jest nadrzędny) i spróbuje wstawić rekord w tabela Nabywca (ponieważ <klienta> jest podrzędność).Jednak z powodu klucz podstawowyobcego klucza informacje zawarte w schemacie bazy danych tabela, operacja wstawiania powoduje naruszenia klucz obcy w bazie danych i Wstaw nie powiedzie się.

Nakazać logiki wierzchołki odwrócić relacji nadrzędny podrzędność podczas operacji update inverse adnotacji jest określona na <relacji> elementu.W wyniku rekordy są dodawane jako pierwsze w tabela Nabywca, a następnie w tabela nika, a operacja powiedzie się.

Następujące wierzchołki wstawia zamówienia (IDZamówienia = 2) w tabela nika i klienta (IDKlienta = "aaaaa") w tabela Nabywca, używając określonego schematu XSD:

<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>

Aby przetestować wierzchołki

  1. Tworzenie tych tabel w tempdb bazy danych:

    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))
    GO
    
  2. Kod schematu skopiować i wkleić go do pliku tekstowego.Zapisz plik jako SampleUpdateSchema.xml.

  3. Skopiuj szablon wierzchołki powyżej i wkleić go do pliku tekstowego.Zapisz plik jako SampleUpdategram.xml w tym samym katalogu, w którym zapisano SampleUpdateSchema.xml.

    Ścieżka katalogu określonego dla mapowania schematu (SampleUpdateSchema.xml) jest katalog, w którym zapisany szablon.Ścieżka bezwzględna również można określić, na przykład:

    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"
    
  4. Tworzenie i używanie szablon wykonać skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).

    Aby uzyskać więcej informacji, zobacz Przy użyciu ADO SQLXML wykonanie kwerendy 4.0.