Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Detta ämne förklarar hur mappningsschemat (XSD eller XDR) som anges i ett uppdateringsgram används för att hantera uppdateringarna. I ett updategram kan du ange namnet på ett annoterat mappningsschema för att använda vid mappning av element och attribut i updategrammet till tabeller och kolumner i Microsoft SQL Server. När ett mappningsschema specificeras i ett updategram måste element- och attributnamnen som anges i updategrammet mappas till elementen och attributen i mappningsschemat.
För att specificera ett mappningsschema använder du mapping-schema-attributet för <sync-elementet> . Följande exempel visar två updategram: ett som använder ett enkelt mappschema och ett som använder ett mer komplext schema.
Anmärkning
Denna dokumentation förutsätter att du är bekant med mallar och stöd för mappningsscheman i SQL Server. För mer information, se Introduktion till annoterade XSD-scheman (SQLXML 4.0). För äldre applikationer som använder XDR, se Annotated XDR Schemas (föråldrade i SQLXML 4.0).
Hantering av datatyper
Om schemat specificerar bild-, binär- eller varbinärSQL Server-datatyp (genom att använda sql:datatype) och inte anger någon XML-datatyp, antar updategrammet att XML-datatypen är binär bas 64. Om din data är bin.base-typ måste du uttryckligen ange typen (dt:type=bin.base eller type="xsd:hexBinary").
Om schemat anger dateTime, date eller time XSD-datatyp måste du också ange motsvarande SQL Server-datatyp genom att använda sql:datatype="dateTime".
När du hanterar parametrar av SQL Server-penningtyp måste du uttryckligen specificera sql:datatype="money" på rätt nod i mappningsschemat.
Examples
Om du vill skapa arbetsexempel med hjälp av följande exempel måste du uppfylla de krav som anges i Krav för att köra SQLXML-exempel.
A. Skapa ett updategram med ett enkelt mappschema
Följande XSD-schema (SampleSchema.xml) är ett mappningsschema som mappar <Customer-elementet> till Sales.Customer-tabellen:
<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>
Följande uppdateringsgram infogar en post i Sales.Customer-tabellen och förlitar sig på det tidigare mappningsschemat för att korrekt mappa denna data till tabellen. Observera att uppdateringsgrammet använder samma elementnamn, <Customer>, som definierat i schemat. Detta är obligatoriskt eftersom updategrammet specificerar ett särskilt schema.
För att testa updategrammet
Kopiera schemakoden ovan och klistra in den i en textfil. Spara filen som SampleUpdateSchema.xml.
Kopiera updategram-mallen nedan och klistra in den i en textfil. Spara filen som SampleUpdategram.xml i samma katalog där du sparade 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>Den katalogväg som anges för mappningsschemat (SampleUpdateSchema.xml) är relativ till katalogen där mallen sparas. En absolut väg kan också specificeras, till exempel:
mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra mallen.
Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.
Det här är motsvarande 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. Infoga en post genom att använda föräldra-barn-relationen som specificeras i mappningsschemat
Schemaelement kan vara relaterade. Elementet< sql:relationship-element> specificerar förälder-barn-relationen mellan schemaelementen. Denna information används för att uppdatera motsvarande tabeller som har primärnyckel/främmande nyckel-relation.
Följande avbildningsschema (SampleSchema.xml) består av två element, <Order> och <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>
Följande uppdateringsgram använder detta XSD-schema för att lägga till en ny orderdetaljpost (ett <OD-element> i <efterblocket> ) för order 43860. Attributet mapping-schema används för att specificera mappningsschemat i 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>
För att testa updategrammet
Kopiera schemakoden ovan och klistra in den i en textfil. Spara filen som SampleUpdateSchema.xml.
Kopiera updategram-mallen ovan och klistra in den i en textfil. Spara filen som SampleUpdategram.xml i samma katalog där du sparade SampleUpdateSchema.xml.
Den katalogväg som anges för mappningsschemat (SampleUpdateSchema.xml) är relativ till katalogen där mallen sparas. En absolut väg kan också specificeras, till exempel:
mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra mallen.
Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.
Det här är motsvarande 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. Infoga en post genom att använda förälder-barn-relationen och invers annotation specificerad i XSD-schemat
Detta exempel illustrerar hur updategram-logiken använder föräldra-barn-relationen som anges i XSD för att hantera uppdateringar, och hur den inversa annotationen används. För mer information om den inversa annotationen, se Specifying the sql:inverse Attribute on sql:relationship (SQLXML 4.0).
Detta exempel antar att följande tabeller finns i tempdb-databasen :
Cust (CustomerID, CompanyName), därCustomerIDär primärnyckelnOrd (OrderID, CustomerID), därCustomerIDär en främmande nyckel som avser primärnyckelnCustomerIDi tabellenCust.
Updategrammet använder följande XSD-schema för att infoga poster i Cust- och Ord-tabellerna:
<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>
XSD-schemat i detta exempel har <Kund-> och <Order-element> , och det specificerar en förälder-barn-relation mellan de två elementen. Den identifierar <Order> som föräldraelement och <Customer> som barnelement.
Updategram-bearbetningslogiken använder informationen om förälder-barn-relationen för att bestämma i vilken ordning poster infogas i tabeller. I detta exempel försöker updategram-logiken först infoga en post i Ord-tabellen (eftersom <Order> är förälder) och försöker sedan infoga en post i Cust-tabellen (eftersom <Customer> är barnet). Men på grund av primärnyckeln/främmande nyckelinformationen som finns i databasens tabellschema orsakar denna insättningsoperation ett främmande nyckelbrott i databasen och insättningen misslyckas.
För att instruera updategram-logiken att vända förälder-barn-relationen under uppdateringsoperationen specificeras den inversa annotationen på relationselementet<>. Som ett resultat läggs poster först till i Cust-tabellen och sedan i Ord-tabellen, och operationen lyckas.
Följande uppdateringsgram infogar en order (OrderID=2) i Ord-tabellen och en kund (CustomerID='AAAAA') i Cust-tabellen genom att använda det specificerade XSD-schemat:
<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>
För att testa updategrammet
Skapa dessa tabeller i tempdb-databasen :
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)) GOKopiera schemakoden ovan och klistra in den i en textfil. Spara filen som SampleUpdateSchema.xml.
Kopiera updategram-mallen ovan och klistra in den i en textfil. Spara filen som SampleUpdategram.xml i samma katalog där du sparade SampleUpdateSchema.xml.
Den katalogväg som anges för mappningsschemat (SampleUpdateSchema.xml) är relativ till katalogen där mallen sparas. En absolut väg kan också specificeras, till exempel:
mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra mallen.
Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.