Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema wird erläutert, wie das Zuordnungsschema (XSD oder XDR) verwendet wird, das in einem Updatediagramm angegeben ist, um die Updates zu verarbeiten. 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 ein Zuordnungsschema in einem Updategramm angegeben wird, müssen die im Updategram angegebenen Element- und Attributnamen den Elementen und Attributen im Zuordnungsschema zugeordnet werden.
Zum Angeben eines Zuordnungsschemas verwenden Sie das mapping-schema Attribut des <Synchronisierungselements> . Die folgenden Beispiele zeigen zwei Aktualisierungsdiagramme: eines, das ein einfaches Zuordnungsschema verwendet, und eines, 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).
Umgang mit Datentypen
Wenn das Schema den imageDatentyp , binary, oder varbinarySQL Server (mithilfe von sql:datatype) angibt und keinen XML-Datentyp angibt, geht das Updategram davon aus, dass der XML-Datentyp ist binary base 64. Wenn Ihre Daten typ sind bin.base , müssen Sie den Typ (dt:type=bin.base oder type="xsd:hexBinary") explizit angeben.
Wenn das Schema den dateTimeDatentyp ,, dateoder time XSD angibt, müssen Sie auch den entsprechenden SQL Server-Datentyp mithilfe von sql:datatype="dateTime".
Beim Behandeln von Parametern des SQL Server-Typs money müssen Sie explizit für den entsprechenden Knoten im Zuordnungsschema angeben sql:datatype="money" .
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.
Ein. Erstellen eines Updategramms 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 Tabelle "Sales.Customer" ein und basiert auf dem vorherigen Zuordnungsschema, um diese Daten ordnungsgemäß der Tabelle zuzuordnen. Beachten Sie, dass das Updategram denselben Elementnamen wie <"Kunde>" verwendet, wie im Schema definiert. Dies ist obligatorisch, da das Updatediagramm ein bestimmtes Schema angibt.
So testen Sie das Updategramm
Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei als SampleUpdateSchema.xml.
Kopieren Sie die updategram-Vorlage unten, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei als SampleUpdategram.xml im selben Verzeichnis, in dem Sie SampleUpdateSchema.xmlgespeichert 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 Zuordnungsschema (SampleUpdateSchema.xml) angegebene Verzeichnispfad ist relativ zum Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:
mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"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 mithilfe der im Zuordnungsschema angegebenen beziehung zwischen übergeordneten und untergeordneten Elementen
Schemaelemente können verknüpft sein. Das <sql:relationship-Element> gibt die Beziehung zwischen den Schemaelementen zwischen den übergeordneten untergeordneten Elementen an. Diese Informationen werden verwendet, um entsprechende Tabellen mit Primärschlüssel-/Fremdschlüsselbeziehung zu aktualisieren.
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 mapping-schema 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 Updategramm
Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei als SampleUpdateSchema.xml.
Kopieren Sie die oben gezeigte Updategramvorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei als SampleUpdategram.xml im selben Verzeichnis, in dem Sie SampleUpdateSchema.xmlgespeichert haben.
Der für das Zuordnungsschema (SampleUpdateSchema.xml) angegebene Verzeichnispfad ist relativ zum Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:
mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"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 mithilfe der beziehung zwischen übergeordneten und untergeordneten Elementen und umgekehrter Anmerkung im XSD-Schema
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 inverse Anmerkung verwendet wird. Weitere Informationen zur Anmerkung finden Sie unter Angeben des sql:inverse-Attributs für sql:relationship (SQLXML 4.0).For more information about the annotation, see Specifying the sql:inverse Attribute on sql:relationship (SQLXML 4.0).inverse
In diesem Beispiel wird davon ausgegangen, dass sich die folgenden Tabellen in der tempdb-Datenbank befinden:
Cust (CustomerID, CompanyName), wobeiCustomerIDes sich um den Primärschlüssel handeltOrd (OrderID, CustomerID)ist einCustomerIDFremdschlüssel, der sich auf denCustomerIDPrimärschlüssel in derCustTabelle bezieht.
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 Aktualisierungsverarbeitungslogik verwendet die Informationen zur Beziehung zwischen übergeordneten und untergeordneten Elementen, um die Reihenfolge zu bestimmen, in der Datensätze in 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üsselinformationen, die im Datenbanktabellenschema enthalten sind, verursacht dieser Einfügevorgang jedoch einen Fremdschlüsselverstoß in der Datenbank, und das Einfügen 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 inverse Anmerkung für das <Beziehungselement> angegeben. Daher werden Datensätze zuerst in der Tabelle "Cust" und dann in der Tabelle "Ord" hinzugefügt, und der Vorgang ist erfolgreich.
Das folgende Updategram fügt eine Bestellung (OrderID=2) in die Tabelle Ord und einen Kunden (CustomerID='AAAAA') in die Cust-Tabelle ein, indem das angegebene XSD-Schema verwendet wird:
<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 Updategramm
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)) GOKopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei als SampleUpdateSchema.xml.
Kopieren Sie die oben gezeigte Updategramvorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei als SampleUpdategram.xml im selben Verzeichnis, in dem Sie SampleUpdateSchema.xmlgespeichert haben.
Der für das Zuordnungsschema (SampleUpdateSchema.xml) angegebene Verzeichnispfad ist relativ zum Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:
mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"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.