Teilen über


Angeben eines Zuordnungsschemas mit Anmerkungen in einem Updategram (SQLXML 4.0)

Gilt für: SQL Server Azure SQL-Datenbank

In diesem Thema wird erläutert, wie das in einem Updategram angegebene Zuordnungsschema (XSD oder XDR) zur Verarbeitung von Updates verwendet wird. In einem Updategram können Sie den Namen eines kommentierten Zuordnungsschemas angeben, das bei der Zuordnung der Elemente und Attribute im Updategram zu Tabellen und Spalten in Microsoft SQL Server verwendet werden soll. Wenn in einem Updategram ein Zuordnungsschema angegeben ist, müssen die im Updategram festgelegten Element- und Attributnamen den Elementen und Attributen im Zuordnungsschema zugeordnet werden.

Zum Angeben eines Zuordnungsschemas verwenden Sie das Zuordnungsschema-Attribut des <Synchronisierungselements> . Die folgenden Beispiele zeigen zwei Updategrams: ein Updategram, das ein einfaches Zuordnungsschema verwendet, und ein Updategram, das ein komplexeres Schema verwendet.

Hinweis

In dieser Dokumentation wird davon ausgegangen, dass Sie mit der Unterstützung von Vorlagen und Zuordnungsschemas in SQL Server vertraut sind. Weitere Informationen finden Sie in der Einführung in kommentierte XSD-Schemas (SQLXML 4.0). Ältere Anwendungen, die XDR verwenden, finden Sie unter "XDR-Schemas mit Anmerkungen" (veraltet in SQLXML 4.0).

Umgehen mit Datentypen

Wenn das Schema den Datentyp "Image", "binary" oder "varbinarySQL Server" (mithilfe von sql:datatype) angibt und keinen XML-Datentyp angibt, geht das Updategram davon aus, dass der XML-Datentyp binäre Basis 64 ist. Wenn Ihre Daten "bin.base " sind, müssen Sie den Typ explizit angeben (dt:type=bin.base oder type="xsd:hexBinary").

Wenn das Schema den XSD-Datentyp "dateTime", "dateTime" oder "time" angibt, müssen Sie auch den entsprechenden SQL Server-Datentyp mithilfe von sql:datatype="dateTime" angeben.

Beim Behandeln von Parametern des SQL Server-Geldtyps müssen Sie sql:datatype="money" im entsprechenden Knoten im Zuordnungsschema explizit angeben.

Beispiele

Zum Erstellen von Arbeitsbeispielen mit den folgenden Beispielen müssen Sie die anforderungen erfüllen, die in "Requirements for Running SQLXML Examples" angegeben sind.

A. Erstellen eines Updategrams mit einem einfachen Zuordnungsschema

Das folgende XSD-Schema (SampleSchema.xml) ist ein Zuordnungsschema, das das <Customer-Element> der Tabelle "Sales.Customer" zuordnet:

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

Das folgende Updategram fügt einen Datensatz in die Sales.Customer-Tabelle ein und ordnet diese Daten anhand des vorherigen Zuordnungsschemas der Tabelle ordnungsgemäß zu. Beachten Sie, dass das Updategram denselben Elementnamen wie <"Kunde>" verwendet, wie im Schema definiert. Dies ist obligatorisch, da das Updategram ein bestimmtes Schema angibt.

So testen Sie das Updategram
  1. Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen SampleUpdateSchema.xml.

  2. Kopieren Sie die unten stehende Updategramvorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Namen SampleUpdategram.xml im gleichen Verzeichnis, in dem Sie SampleUpdateSchema.xml gespeichert haben.

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

    Der für das Zuordnungschema (SampleUpdateSchema.xml) angegebene Verzeichnispfad bezieht sich auf das Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"  
    
  3. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um die Vorlage auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML 4.0-Abfragen.

Dies ist das entsprechende XDR-Schema:

<?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. Einfügen eines Datensatzes durch Verwenden der im Zuordnungsschema angegebenen Über-/Unterordnungsbeziehung

Schemaelemente können in Beziehung gesetzt werden. Das <sql:relationship-Element> gibt die Beziehung zwischen den Schemaelementen zwischen den übergeordneten untergeordneten Elementen an. Mit diesen Informationen werden die entsprechenden Tabellen aktualisiert, die Primärschlüssel-Fremdschlüssel-Beziehungen aufweisen.

Das folgende Zuordnungsschema (SampleSchema.xml) besteht aus zwei Elementen: <Order> und< 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>  

Das folgende Updategram verwendet dieses XSD-Schema, um einen neuen Auftragsdetaildatensatz (ein OD-Element> im <After-Block>) für die Reihenfolge 43860 hinzuzufügen.< Das Zuordnungsschema-Attribut wird verwendet, um das Zuordnungsschema im Updategramm anzugeben.

<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>  
So testen Sie das Updategram
  1. Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen SampleUpdateSchema.xml.

  2. Kopieren Sie die oben stehende Updategramvorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Namen SampleUpdategram.xml im gleichen Verzeichnis, in dem Sie SampleUpdateSchema.xml gespeichert haben.

    Der für das Zuordnungschema (SampleUpdateSchema.xml) angegebene Verzeichnispfad bezieht sich auf das Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"  
    
  3. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um die Vorlage auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML 4.0-Abfragen.

Dies ist das entsprechende XDR-Schema:

<?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. Einfügen eines Datensatzes durch Verwenden der im XSD-Schema angegebenen Über-/Unterordnungsbeziehung und der inverse-Anmerkung

In diesem Beispiel wird veranschaulicht, wie die Updategramlogik die in der XSD angegebene beziehung zwischen übergeordneten und untergeordneten Elementen verwendet, um Aktualisierungen zu verarbeiten und wie die Umgekehrtanmerkung verwendet wird. Weitere Informationen zur umgekehrten Anmerkung finden Sie unter Angeben des sql:inverse-Attributs für sql:relationship (SQLXML 4.0).For more information about the inverse annotation, see Specifying the sql:inverse Attribute on sql:relationship (SQLXML 4.0).

In diesem Beispiel wird davon ausgegangen, dass sich die folgenden Tabellen in der tempdb-Datenbank befinden:

  • Cust (CustomerID, CompanyName), wobei CustomerID der Primärschlüssel ist

  • Ord (OrderID, CustomerID), wobei CustomerID ein Fremdschlüssel ist, der auf den CustomerID Primärschlüssel in der Cust-Tabelle verweist.

Das Updategram verwendet das folgende XSD-Schema, um Datensätze in die Cust und Ord-Tabellen einzufügen:

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

Das XSD-Schema in diesem Beispiel enthält <Elemente "Customer>" und <"Order>", und es gibt eine Beziehung zwischen den beiden Elementen zwischen übergeordneten und untergeordneten Elementen an. Er identifiziert <"Order"> als übergeordnetes Element und< "Customer>" als untergeordnetes Element.

Die Verarbeitungslogik des Updategrams bestimmt mit den Informationen über die Über-/Unterordnungsbeziehung die Reihenfolge, in der die Datensätze in die Tabellen eingefügt werden. In diesem Beispiel versucht die Aktualisierungslogik zunächst, einen Datensatz in die Tabelle "Ord" einzufügen (da "Order>" das übergeordnete Element ist) und dann versucht, einen Datensatz in die Cust-Tabelle (da <Customer> das untergeordnete Element ist) einzufügen.< Aufgrund der Primärschlüssel-Fremdschlüssel-Informationen, die im Datenbanktabellenschema enthalten sind, verursacht dieser Einfügevorgang jedoch eine Fremdschlüsselverletzung in der Datenbank und der Vorgang schlägt fehl.

Um die Updategramlogik anzuweisen, die Beziehung zwischen übergeordneten und untergeordneten Elementen während des Aktualisierungsvorgangs rückgängig zu machen, wird die Umkehranmerkung für das< Beziehungselement> angegeben. Als Folge werden die Datensätze zuerst in die Cust-Tabelle und anschließend in die Ord-Tabelle eingefügt, und der Vorgang wird erfolgreich ausgeführt.

Das folgende Updategram fügt mit dem angegebenen XSD-Schema einen Auftrag (OrderID=2) in die Ord-Tabelle ein und einen Kunden (CustomerID='AAAAA') in die Cust-Tabelle.

<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>  
So testen Sie das Updategram
  1. Erstellen Sie diese Tabellen in der tempdb-Datenbank :

    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. Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen SampleUpdateSchema.xml.

  3. Kopieren Sie die oben stehende Updategramvorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Namen SampleUpdategram.xml im gleichen Verzeichnis, in dem Sie SampleUpdateSchema.xml gespeichert haben.

    Der für das Zuordnungschema (SampleUpdateSchema.xml) angegebene Verzeichnispfad bezieht sich auf das Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"  
    
  4. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um die Vorlage auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML 4.0-Abfragen.

Weitere Informationen

Sicherheitsüberlegungen zu Updategramms (SQLXML 4.0)