Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Een updategram geeft een invoegbewerking aan wanneer een recordinstantie wordt weergegeven in het <after> blok, maar niet in het bijbehorende <before> blok. In dit geval voegt het updategram de record in het <after> blok in de database in.
Dit is de updategram-indeling voor een invoegbewerking:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync [mapping-schema="SampleSchema.xml"] >
[<updg:before>
</updg:before>]
<updg:after [updg:returnid="x y ..."] >
<ElementName [updg:id="value"]
[updg:at-identity="x"]
[updg:guid="y"]
attribute="value"
attribute="value"
...
/>
[<ElementName .../>... ]
</updg:after>
</updg:sync>
</ROOT>
<before> blok
Het <before> blok kan worden weggelaten voor een invoegbewerking. Als het optionele mapping-schema kenmerk niet is opgegeven, wordt het <ElementName> opgegeven in het updategram toegewezen aan een databasetabel en worden de onderliggende elementen of kenmerken toegewezen aan kolommen in de tabel.
<after> blok
U kunt een of meer records in het <after> blok opgeven.
Als het <after> blok geen waarde levert voor een bepaalde kolom, gebruikt het updategram de standaardwaarde die is opgegeven in het geannoteerde schema (als er een schema is opgegeven). Als in het schema geen standaardwaarde voor de kolom wordt opgegeven, geeft het updategram geen expliciete waarde op voor deze kolom en wijst in plaats daarvan de standaardwaarde van SQL Server (indien opgegeven) toe aan deze kolom. Als er geen standaardwaarde voor SQL Server is en de kolom een NULL waarde accepteert, stelt het updategram de kolomwaarde in op NULL. Als de kolom geen standaardwaarde heeft of een NULL waarde accepteert, mislukt de opdracht en retourneert het updategram een fout. Het optionele updg:returnid kenmerk wordt gebruikt om de identiteitswaarde te retourneren die door het systeem wordt gegenereerd wanneer een record wordt toegevoegd aan een tabel met een IDENTITYkolom -type.
updg:id-kenmerk
Als het updategram alleen records invoegt, is voor het updg:id updategram het kenmerk niet vereist. Zie updg:id voor meer informatie.
updg:at-identity-kenmerk
Wanneer een updategram een record invoegt in een tabel met een IDENTITYkolom -type, kan het updategram de door het systeem toegewezen waarde vastleggen met behulp van het optionele updg:at-identity kenmerk. Het updategram kan deze waarde vervolgens gebruiken in volgende bewerkingen. Bij het uitvoeren van het updategram kunt u de identiteitswaarde retourneren die wordt gegenereerd door het updg:returnid kenmerk op te geven.
updg:guid-kenmerk
Het updg:guid kenmerk is een optioneel kenmerk dat een globaal unieke id genereert. Deze waarde blijft binnen het bereik van het hele <sync> blok waarin deze is opgegeven. U kunt deze waarde overal in het <sync> blok gebruiken. Het kenmerk roept de NEWGUID() SQL Server-functie aan om de unieke id te genereren.
Voorbeelden
Als u werkvoorbeelden wilt maken met behulp van de volgende voorbeelden, moet u voldoen aan de vereisten die zijn opgegeven in Vereisten voor het uitvoeren van SQLXML-voorbeelden.
Voordat u de updategramvoorbeelden gebruikt, moet u het volgende overwegen:
In de meeste voorbeelden wordt standaardtoewijzing gebruikt (dat wil gezegd, er wordt geen toewijzingsschema opgegeven in het updategram). Zie Een geannoteerd toewijzingsschema opgeven in een Updategram (SQLXML 4.0) voor meer voorbeelden van updategrammen die toewijzingsschema's gebruiken.
In de meeste voorbeelden wordt de
AdventureWorks2025voorbeelddatabase gebruikt. Alle updates worden toegepast op de tabellen in deze database.
Eén. Een record invoegen met behulp van een updategram
Met dit kenmerkgerichte updategram wordt een record in de HumanResources.Employee tabel in de AdventureWorks2025 database ingevoegd.
In dit voorbeeld geeft het updategram geen toewijzingsschema op. Daarom gebruikt het updategram standaardtoewijzing, waarbij de elementnaam wordt toegewezen aan een tabelnaam en de kenmerken of onderliggende elementen worden toegewezen aan kolommen in die tabel.
Het AdventureWorks2025 schema voor de tabel HumanResources.Department legt een beperking 'not null' op voor alle kolommen. Daarom moet het updategram waarden bevatten die zijn opgegeven voor alle kolommen. De afdelings-id is een IDENTITYkolom -type. Daarom worden er geen waarden voor opgegeven.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:before>
</updg:before>
<updg:after>
<HumanResources.Department Name="New Product Research" GroupName="Research and Development" ModifiedDate="2010-08-31" />
</updg:after>
</updg:sync>
</ROOT>
Een XPath-voorbeeldquery testen op basis van het schema
Kopieer het vorige updategram en plak het in een tekstbestand. Sla het bestand op als
MyUpdategram.xml.Maak en gebruik het SQLXML 4.0-testscript (
Sqlxml4test.vbs) om de sjabloon uit te voeren.Zie ADO gebruiken om SQLXML 4.0-query's uit te voeren voor meer informatie.
In een elementgerichte toewijzing ziet het updategram er als volgt uit:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:before>
</updg:before>
<updg:after>
<HumanResources.Department>
<Name> New Product Research </Name>
<GroupName> Research and Development </GroupName>
<ModifiedDate>2010-08-31</ModifiedDate>
</HumanResources.Department>
</updg:after>
</updg:sync>
</ROOT>
In een updategram met gemengde modus (elementgericht en kenmerkgericht) kan een element zowel kenmerken als subelementen bevatten, zoals wordt weergegeven in dit updategram:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:before>
</updg:before>
<updg:after>
<HumanResources.Department Name="New Product Research">
<GroupName>Research and Development</GroupName>
<ModifiedDate>2010-08-31</ModifiedDate>
</HumanResources.Department>
</updg:after>
</updg:sync>
</ROOT>
B. Meerdere records invoegen met behulp van een updategram
Met dit updategram worden twee nieuwe shift-records aan de HumanResources.Shift tabel toegevoegd. Het updategram geeft het optionele blok niet op <before> .
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:after>
<HumanResources.Shift Name="Day-Evening" StartTime="1900-01-01 11:00:00.000" EndTime="1900-01-01 19:00:00.000" ModifiedDate="2004-01-01 00:00:00.000" />
<HumanResources.Shift Name="Evening-Night" StartTime="1900-01-01 19:00:00.000" EndTime="1900-01-01 03:00:00.000" ModifiedDate="2004-01-01 00:00:00.000" />
</updg:after>
</updg:sync>
</ROOT>
Een XPath-voorbeeldquery testen op basis van het schema
Kopieer het vorige updategram en plak het in een tekstbestand. Sla het bestand op als
Updategram-AddShifts.xml.Maak en gebruik het SQLXML 4.0-testscript (
Sqlxml4test.vbs) om de sjabloon uit te voeren.Zie ADO gebruiken om SQLXML 4.0-query's uit te voeren voor meer informatie.
Een andere versie van dit voorbeeld is een updategram dat twee afzonderlijke <after> blokken gebruikt in plaats van één blok om de twee werknemers in te voegen. Dit is geldig en kan als volgt worden gecodeerd:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:after>
<HumanResources.Shift Name="Day-Evening" StartTime="1900-01-01 11:00:00.000" EndTime="1900-01-01 19:00:00.000" ModifiedDate="2004-01-01 00:00:00.000" />
</updg:after>
<updg:before>
</updg:before>
<updg:after>
<HumanResources.Shift Name="Evening-Night" StartTime="1900-01-01 19:00:00.000" EndTime="1900-01-01 03:00:00.000" ModifiedDate="2004-01-01 00:00:00.000" />
</updg:after>
</updg:sync>
</ROOT>
C. Werken met geldige SQL Server-tekens die niet geldig zijn in XML
In SQL Server kunnen tabelnamen een spatie bevatten, zoals de tabel Ordergegevens in de Northwind-database. Dit is echter niet geldig in XML-tekens die geldige SQL Server-id's zijn, maar geen geldige XML-id's kunnen worden gecodeerd met behulp van _xHHHH_ de coderingswaarde, waarbij HHHH staat voor de hexadecimale UCS-2-code van vier cijfers voor het teken in de meest significante bit-first-volgorde.
Opmerking
In dit voorbeeld wordt de Northwind-database gebruikt. U kunt de Northwind-database installeren met behulp van een SQL-script dat u kunt downloaden vanaf deze Microsoft-website.
De elementnaam moet ook tussen vierkante haken ([ ]) worden geplaatst. Omdat de tekens [en] niet geldig zijn in XML, moet u ze coderen als _x005B_ respectievelijk _x005D_. (Als u een toewijzingsschema gebruikt, kunt u elementnamen opgeven die geen tekens bevatten die niet geldig zijn, zoals spaties. Het toewijzingsschema voert de benodigde toewijzing uit; Daarom hoeft u deze tekens niet te coderen).
Met dit updategram wordt een record toegevoegd aan de tabel Ordergegevens in de Northwind-database:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:before>
</updg:before>
<updg:after>
<_x005B_Order_x0020_Details_x005D_ OrderID="1" ProductID="11" UnitPrice="$1.0" Quantity="1" Discount="0.0" />
</updg:after>
</updg:sync>
</ROOT>
De kolom Prijs per eenheid in de tabel Ordergegevens is van het geldtype . Als u de juiste typeconversie wilt toepassen (van een tekenreekstype op een geldtype ), moet het dollarteken ($) worden toegevoegd als onderdeel van de waarde. Als het updategram geen toewijzingsschema opgeeft, wordt het eerste teken van de tekenreekswaarde geëvalueerd. Als het eerste teken een dollarteken ($) is, wordt de juiste conversie toegepast.
Als het updategram is opgegeven voor een toewijzingsschema waarbij de kolom op de juiste wijze is gemarkeerd als ofwel dt:type="fixed.14.4"sql:datatype="money", is het dollarteken ($) niet vereist en wordt de conversie verwerkt door de toewijzing. Dit is de aanbevolen manier om ervoor te zorgen dat de juiste typeconversie plaatsvindt.
Een XPath-voorbeeldquery testen op basis van het schema
Kopieer het vorige updategram en plak het in een tekstbestand. Sla het bestand op als
UpdategramSpacesInTableName.xml.Maak en gebruik het SQLXML 4.0-testscript (
Sqlxml4test.vbs) om de sjabloon uit te voeren.Zie ADO gebruiken om SQLXML 4.0-query's uit te voeren voor meer informatie.
D. Gebruik het at-identity-kenmerk om de waarde op te halen die is ingevoegd in de kolom IDENTITY-type
In het volgende updategram worden twee records ingevoegd: één in de Sales.SalesOrderHeader tabel en een andere in de Sales.SalesOrderDetail tabel.
Eerst voegt het updategram een record toe aan de Sales.SalesOrderHeader tabel. In deze tabel is de kolom SalesOrderID een IDENTITYkolom -type. Wanneer u deze record aan de tabel toevoegt, gebruikt het updategram daarom het at-identity kenmerk om de toegewezen SalesOrderID-waarde vast te leggen als 'x' (een tijdelijke aanduiding). Vervolgens geeft Updategram deze at-identity variabele op als de waarde van het kenmerk SalesOrderID in het <element Sales.SalesOrderDetail> .
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:before>
</updg:before>
<updg:after>
<Sales.SalesOrderHeader updg:at-identity="x" RevisionNumber="1" OrderDate="2001-07-01 00:00:00.000" DueDate="2001-07-13 00:00:00.000" OnlineOrderFlag="0" CustomerID="676" ContactID="378" BillToAddressID="985" ShipToAddressID="985" ShipMethodID="5" SubTotal="24643.9362" TaxAmt="1971.5149" Freight="616.0984" rowguid="00001111-2222-3333-4444-556677889900" ModifiedDate="2001-07-08 00:00:00.000" />
<Sales.SalesOrderDetail SalesOrderID="x" LineNumber="1" OrderQty="1" ProductID="776" SpecialOfferID="1" UnitPrice="2429.9928" UnitPriceDiscount="0.00" rowguid="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" ModifiedDate="2001-07-01 00:00:00.000" />
</updg:after>
</updg:sync>
</ROOT>
Als u de identiteitswaarde wilt retourneren die door het updg:at-identity kenmerk wordt gegenereerd, kunt u het updg:returnid kenmerk gebruiken. Het volgende voorbeeld is een herzien updategram dat deze identiteitswaarde retourneert. (Met dit updategram worden twee orderrecords en twee orderdetailrecords toegevoegd, alleen om het voorbeeld wat complexer te maken.)
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:before>
</updg:before>
<updg:after updg:returnid="x y">
<HumanResources.Shift updg:at-identity="x" Name="Day-Evening" StartTime="1900-01-01 11:00:00.000" EndTime="1900-01-01 19:00:00.000" ModifiedDate="2004-01-01 00:00:00.000" />
<HumanResources.Shift updg:at-identity="y" Name="Evening-Night" StartTime="1900-01-01 19:00:00.000" EndTime="1900-01-01 03:00:00.000" ModifiedDate="2004-01-01 00:00:00.000" />
</updg:after>
</updg:sync>
</ROOT>
Wanneer het updategram wordt uitgevoerd, worden resultaten geretourneerd die vergelijkbaar zijn met het volgende voorbeeld, waaronder de identiteitswaarde (de gegenereerde waarde van de ShiftID-kolom die wordt gebruikt voor tabelidentiteit) die is gegenereerd:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<returnid>
<x>4</x>
<y>5</y>
</returnid>
</ROOT>
Een XPath-voorbeeldquery testen op basis van het schema
Kopieer het vorige updategram en plak het in een tekstbestand. Sla het bestand op als
Updategram-returnId.xml.Maak en gebruik het SQLXML 4.0-testscript (
Sqlxml4test.vbs) om de sjabloon uit te voeren.Zie ADO gebruiken om SQLXML 4.0-query's uit te voeren voor meer informatie.
E.
updg:guid Het kenmerk gebruiken om een unieke waarde te genereren
In dit voorbeeld voegt het updategram een record in de tabellen Cust en CustOrder in. Het updategram genereert ook een unieke waarde voor het kenmerk CustomerID met behulp van het updg:guid kenmerk.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:before>
</updg:before>
<updg:after updg:returnid="x">
<Cust updg:guid="x">
<CustID>x</CustID>
<LastName>Fuller</LastName>
</Cust>
<CustOrder>
<CustID>x</CustID>
<OrderID>1</OrderID>
</CustOrder>
</updg:after>
</updg:sync>
</ROOT>
Het updategram geeft het returnid kenmerk op. Als gevolg hiervan wordt de GEGENEREERDe GUID geretourneerd:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<returnid>
<x>7111BD1A-7F0B-4CEE-B411-260DADFEFA2A</x>
</returnid>
</ROOT>
Het updategram testen
Kopieer het vorige updategram en plak het in een tekstbestand. Sla het bestand op als
Updategram-GenerateGuid.xml.Maak deze tabellen:
USE tempdb; CREATE TABLE Cust ( CustID UNIQUEIDENTIFIER, LastName VARCHAR (20) ); CREATE TABLE CustOrder ( CustID UNIQUEIDENTIFIER, OrderID INT );Maak en gebruik het SQLXML 4.0-testscript (
Sqlxml4test.vbs) om de sjabloon uit te voeren.Zie ADO gebruiken om SQLXML 4.0-query's uit te voeren voor meer informatie.
F. Een schema opgeven in een updategram
Het updategram in dit voorbeeld voegt een record in de volgende tabel in:
CustOrder(OrderID, EmployeeID, OrderType)
Er wordt een XSD-schema opgegeven in dit updategram (er is dus geen standaardtoewijzing van updategram-elementen en -kenmerken). Het schema biedt de benodigde toewijzing van de elementen en kenmerken aan de databasetabellen en -kolommen.
In het volgende schema (CustOrderSchema.xml) wordt een <CustOrder> element beschreven dat bestaat uit de OrderID en EmployeeID kenmerken. Om het schema interessanter te maken, wordt er een standaardwaarde toegewezen aan het EmployeeID kenmerk. Een updategram maakt alleen gebruik van de standaardwaarde van een kenmerk voor invoegbewerkingen en alleen als het updategram dat kenmerk niet opgeeft.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="CustOrder">
<xsd:complexType>
<xsd:attribute name="OrderID" type="xsd:integer" />
<xsd:attribute name="EmployeeID" type="xsd:integer" />
<xsd:attribute name="OrderType " type="xsd:integer" default="1" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Met dit updategram wordt een record ingevoegd in de tabel CustOrder. In het updategram worden alleen de kenmerkwaarden OrderID en EmployeeID opgegeven. De waarde van het OrderType-kenmerk wordt niet opgegeven. Daarom gebruikt het updategram de standaardwaarde van het kenmerk EmployeeID dat is opgegeven in het voorgaande schema.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync mapping-schema="CustOrderSchema.xml">
<updg:after>
<CustOrder OrderID="98000" EmployeeID="1" />
</updg:after>
</updg:sync>
</ROOT>
Zie Annotated Mapping Schema opgeven in een Updategram (SQLXML 4.0) voor meer voorbeelden van updategrammen die een toewijzingsschema opgeven.
Het updategram testen
Maak deze tabel in de
tempdbdatabase:USE tempdb; CREATE TABLE CustOrder ( OrderID INT, EmployeeID INT, OrderType INT );Kopieer het vorige schema en plak het in een tekstbestand. Sla het bestand op als
CustOrderSchema.xml.Kopieer het vorige updategram en plak het in een tekstbestand. Sla het bestand op in
CustOrderUpdategram.xmldezelfde map die u in de vorige stap hebt gebruikt.Maak en gebruik het SQLXML 4.0-testscript (
Sqlxml4test.vbs) om het updategram uit te voeren.Zie ADO gebruiken om SQLXML 4.0-query's uit te voeren voor meer informatie.
Dit is het equivalente XDR-schema:
<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="CustOrder">
<AttributeType name="OrderID" />
<AttributeType name="EmployeeID" />
<AttributeType name="OrderType" default="1" />
<attribute type="OrderID" />
<attribute type="EmployeeID" />
<attribute type="OrderType" />
</ElementType>
</Schema>
G. Gebruik het kenmerk xsi:nil om null-waarden in te voegen in een kolom
Als u een null-waarde wilt invoegen in de corresponderende kolom in de tabel, kunt u het xsi:nil kenmerk opgeven voor een element in een updategram. In het bijbehorende XSD-schema moet ook het XSD-kenmerk nillable worden opgegeven.
Denk bijvoorbeeld aan dit XSD-schema:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Student" sql:relation="Students">
<xsd:complexType>
<xsd:all>
<xsd:element name="fname" sql:field="first_name" type="xsd:string" nillable="true" />
</xsd:all>
<xsd:attribute name="SID" sql:field="StudentID" type="xsd:ID" />
<xsd:attribute name="lname" sql:field="last_name" type="xsd:string" />
<xsd:attribute name="minitial" sql:field="middle_initial" type="xsd:string" />
<xsd:attribute name="years" sql:field="no_of_years" type="xsd:integer" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Het XSD-schema geeft het nillable="true"<fname> element op. In het volgende updategram wordt dit schema gebruikt:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" xmlns:updg="urn:schemas-microsoft-com:xml-updategram" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<updg:sync mapping-schema="StudentSchema.xml">
<updg:before />
<updg:after>
<Student SID="S00004" lname="Elmaci" minitial="" years="2">
<fname xsi:nil="true">
</fname>
</Student>
</updg:after>
</updg:sync>
</ROOT>
Het updategram geeft het xsi:nil<fname> element in het <after> blok op. Wanneer dit updategram wordt uitgevoerd, wordt daarom een waarde NULL ingevoegd voor de kolom first_name in de tabel.
Het updategram testen
Maak de volgende tabel in de
tempdbdatabase:USE tempdb; CREATE TABLE Students ( StudentID CHAR (6) NOT NULL, first_name VARCHAR (50), last_name VARCHAR (50), middle_initial CHAR (1), no_of_years INT NULL ); GOKopieer het vorige schema en plak het in een tekstbestand. Sla het bestand op als
StudentSchema.xml.Kopieer het vorige updategram en plak het in een tekstbestand. Sla het bestand op zoals
StudentUpdategram.xmlin dezelfde map die in de vorige stap is gebruikt om op te slaanStudentSchema.xml.Maak en gebruik het SQLXML 4.0-testscript (
Sqlxml4test.vbs) om het updategram uit te voeren.Zie ADO gebruiken om SQLXML 4.0-query's uit te voeren voor meer informatie.
H. Naamruimten opgeven in een updategram
In een updategram kunt u elementen hebben die deel uitmaken van een naamruimte die is gedeclareerd in hetzelfde element in het updategram. In dit geval moet het bijbehorende schema ook dezelfde naamruimte declareren en moet het element deel uitmaken van die doelnaamruimte.
In het volgende updategram (UpdateGram-ElementHavingNamespace.xml) behoort het <Order> element bijvoorbeeld tot een naamruimte die in het element is gedeclareerd.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync mapping-schema="XSD-ElementHavingNameSpace.xml">
<updg:after>
<x:Order xmlns:x="https://server/xyz/schemas/" updg:at-identity="SalesOrderID" RevisionNumber="1" OrderDate="2001-07-01 00:00:00.000" DueDate="2001-07-13 00:00:00.000" OnlineOrderFlag="0" CustomerID="676" ContactID="378" BillToAddressID="985" ShipToAddressID="985" ShipMethodID="5" SubTotal="24643.9362" TaxAmt="1971.5149" Freight="616.0984" rowguid="00009999-8888-7777-6666-554433221100" ModifiedDate="2001-07-08 00:00:00.000" />
</updg:after>
</updg:sync>
</ROOT>
In dit geval moet het schema ook de naamruimte declareren, zoals wordt weergegeven in dit schema:
In het volgende schema (XSD-ElementHavingNamespace.xml) ziet u hoe het bijbehorende element en de bijbehorende kenmerken moeten worden gedeclareerd.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:sql="urn:schemas-microsoft-com:mapping-schema" xmlns:x="https://server/xyz/schemas/" targetNamespace="https://server/xyz/schemas/">
<xsd:element name="Order" sql:relation="Sales.SalesOrderHeader" type="x:Order_type" />
<xsd:complexType name="Order_type">
<xsd:attribute name="SalesOrderID" type="xsd:ID" />
<xsd:attribute name="RevisionNumber" type="xsd:unsignedByte" />
<xsd:attribute name="OrderDate" type="xsd:dateTime" />
<xsd:attribute name="DueDate" type="xsd:dateTime" />
<xsd:attribute name="ShipDate" type="xsd:dateTime" />
<xsd:attribute name="Status" type="xsd:unsignedByte" />
<xsd:attribute name="OnlineOrderFlag" type="xsd:boolean" />
<xsd:attribute name="SalesOrderNumber" type="xsd:string" />
<xsd:attribute name="PurchaseOrderNumber" type="xsd:string" />
<xsd:attribute name="AccountNumber" type="xsd:string" />
<xsd:attribute name="CustomerID" type="xsd:int" />
<xsd:attribute name="ContactID" type="xsd:int" />
<xsd:attribute name="SalesPersonID" type="xsd:int" />
<xsd:attribute name="TerritoryID" type="xsd:int" />
<xsd:attribute name="BillToAddressID" type="xsd:int" />
<xsd:attribute name="ShipToAddressID" type="xsd:int" />
<xsd:attribute name="ShipMethodID" type="xsd:int" />
<xsd:attribute name="CreditCardID" type="xsd:int" />
<xsd:attribute name="CreditCardApprovalCode" type="xsd:string" />
<xsd:attribute name="CurrencyRateID" type="xsd:int" />
<xsd:attribute name="SubTotal" type="xsd:decimal" />
<xsd:attribute name="TaxAmt" type="xsd:decimal" />
<xsd:attribute name="Freight" type="xsd:decimal" />
<xsd:attribute name="TotalDue" type="xsd:decimal" />
<xsd:attribute name="Comment" type="xsd:string" />
<xsd:attribute name="rowguid" type="xsd:string" />
<xsd:attribute name="ModifiedDate" type="xsd:dateTime" />
</xsd:complexType>
</xsd:schema>
Het updategram testen
Kopieer het vorige schema en plak het in een tekstbestand. Sla het bestand op als
XSD-ElementHavingNamespace.xml.Kopieer het vorige updategram en plak het in een tekstbestand. Sla het bestand op zoals
Updategram-ElementHavingNamespace.xmlin dezelfde map die is gebruikt om op te slaanXSD-ElementHavingnamespace.xml.Maak en gebruik het SQLXML 4.0-testscript (
Sqlxml4test.vbs) om het updategram uit te voeren.Zie ADO gebruiken om SQLXML 4.0-query's uit te voeren voor meer informatie.
I. Gegevens invoegen in een kolom van het XML-gegevenstype
U kunt updategrammen gebruiken om gegevens die zijn opgeslagen in xml-gegevenstypekolommen in te voegen en bij te werken met de volgende overwegingen:
De XML-kolom kan niet worden gebruikt voor het identificeren van een bestaande rij. Daarom kan deze niet worden opgenomen in de
updg:beforesectie van een updategram.Naamruimten die binnen het bereik van het XML-fragment dat in de XML-kolom is ingevoegd, blijven behouden en hun naamruimtedeclaraties worden toegevoegd aan het bovenste element van het ingevoegde fragment.
In het volgende updategram (SampleUpdateGram.xml) werkt het <Desc> element bijvoorbeeld de kolom ProductDescription bij in de tabel Production>productModel in de AdventureWorks2025 voorbeelddatabase. Het resultaat van dit updategram is dat de XML-inhoud van de kolom ProductDescription wordt bijgewerkt met de XML-inhoud van het <Desc> element.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync mapping-schema="SampleSchema.xml">
<updg:before>
<ProductModel ProductModelID="19">
<Name>Mountain-100</Name>
</ProductModel>
</updg:before>
<updg:after>
<ProductModel>
<Name>Mountain-100</Name>
<Desc>
<?xml href="ProductDescription.xsl" type="text/xsl" e="text/xsl"?>
<p1:ProductDescription xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription" xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain" xmlns:wf="https://www.adventure-works.com/schemas/OtherFeatures" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="">
<p1:Summary>
<html:p>Insert Example</html:p>
</p1:Summary>
<p1:Manufacturer>
<p1:Name>AdventureWorks</p1:Name>
<p1:Copyright>2002</p1:Copyright>
<p1:ProductURL>HTTP://www.Adventure-works.com</p1:ProductURL>
</p1:Manufacturer>
<p1:Features>
These are the product highlights.
<wm:Warranty>
<wm:WarrantyPeriod>3 years</wm:WarrantyPeriod>
<wm:Description>parts and labor</wm:Description>
</wm:Warranty>
<wm:Maintenance>
<wm:NoOfYears>10 years</wm:NoOfYears>
<wm:Description>maintenance contract available through your dealer or any AdventureWorks retail store.</wm:Description>
</wm:Maintenance>
<wf:wheel>High performance wheels.</wf:wheel>
<wf:saddle>
<html:i>Anatomic design</html:i>
and made from durable leather for a full-day of riding in comfort.
</wf:saddle>
<wf:pedal>
<html:b>Top-of-the-line</html:b>
clipless pedals with adjustable tension.
</wf:pedal>
<wf:BikeFrame>Each frame is hand-crafted in our Bothell facility to the optimum diameter and wall-thickness required of a premium mountain frame. The heat-treated welded aluminum frame has a larger diameter tube that absorbs the bumps.</wf:BikeFrame>
<wf:crankset> Triple crankset; aluminum crank arm; flawless shifting. </wf:crankset>
</p1:Features>
<p1:Picture>
<p1:Angle>front</p1:Angle>
<p1:Size>small</p1:Size>
<p1:ProductPhotoID>118</p1:ProductPhotoID>
</p1:Picture>
<p1:Specifications>
These are the product specifications.
<Material>Aluminum Alloy</Material>
<Color>Available in most colors</Color>
<ProductLine>Mountain bike</ProductLine>
<Style>Unisex</Style>
<RiderExperience>Advanced to Professional riders</RiderExperience>
</p1:Specifications>
</p1:ProductDescription>
</Desc>
</ProductModel>
</updg:after>
</updg:sync>
</ROOT>
Het updategram verwijst naar het volgende XSD-schema (SampleSchema.xml).
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">
<xsd:element name="ProductModel" sql:relation="Production.ProductModel">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"></xsd:element>
<xsd:element name="Desc" sql:field="CatalogDescription" sql:datatype="xml">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ProductDescription">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Summary" type="xsd:anyType">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="ProductModelID" sql:field="ProductModelID" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Het updategram testen
Kopieer het vorige schema en plak het in een tekstbestand. Sla het bestand op als
XSD-SampleSchema.xml.Opmerking
Omdat updategrammen standaardtoewijzing ondersteunen, is er geen manier om het begin en einde van het XML-gegevenstype te identificeren. Dit betekent dat een toewijzingsschema vereist is bij het invoegen of bijwerken van tabellen met xml-gegevenstypekolommen. Wanneer er geen schema wordt opgegeven, retourneert SQLXML een fout die aangeeft dat een van de kolommen ontbreekt in de tabel.
Kopieer het vorige updategram en plak het in een tekstbestand. Sla het bestand op zoals
SampleUpdategram.xmlin dezelfde map die is gebruikt om op te slaanSampleSchema.xml.Maak en gebruik het SQLXML 4.0-testscript (
Sqlxml4test.vbs) om het updategram uit te voeren.Zie ADO gebruiken om SQLXML 4.0-query's uit te voeren voor meer informatie.