Megosztás a következőn keresztül:


Adatok beszúrása XML-updategramokkal (SQLXML 4.0)

A következőkre vonatkozik:SQL ServerAzure SQL Database

Az updategram beszúrási műveletet jelez, ha egy rekordpéldány jelenik meg a <after> blokkban, de a megfelelő <before> blokkban nem. Ebben az esetben az updategram beszúrja a blokkban lévő <after> rekordot az adatbázisba.

Ez a beszúrási művelet updategram formátuma:

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

A <before> blokk kihagyható beszúrási művelethez. Ha a választható mapping-schema attribútum nincs megadva, az <ElementName> updategramban megadott adatbázistábla lesz leképezve, a gyermekelemek és attribútumok pedig a tábla oszlopaihoz lesznek leképezve.

<after> blokk

A blokkban <after> megadhat egy vagy több rekordot.

Ha a <after> blokk nem ad meg értéket egy adott oszlophoz, az updategram a jegyzetekkel ellátott sémában megadott alapértelmezett értéket használja (ha séma van megadva). Ha a séma nem ad meg alapértelmezett értéket az oszlophoz, az updategram nem ad meg explicit értéket ehhez az oszlophoz, hanem az SQL Server alapértelmezett értékét (ha meg van adva) ehhez az oszlophoz rendeli. Ha nincs alapértelmezett SQL Server-érték, és az oszlop elfogad egy NULL értéket, az updategram az oszlop értékét a következőre NULLállítja. Ha az oszlop nem rendelkezik alapértelmezett értékkel, vagy elfogad egy NULL értéket, a parancs meghiúsul, és az updategram hibát ad vissza. Az opcionális updg:returnid attribútum azt az identitásértéket adja vissza, amelyet a rendszer generál, amikor rekordot ad hozzá egy -type oszlopot tartalmazó IDENTITYtáblához.

updg:id attribútum

Ha az updategram csak rekordokat szúr be, az updategram nem igényli az updg:id attribútumot. További információ: updg:idAdatok frissítése XML Updategrams használatával (SQLXML 4.0).

updg:at-identity attribútum

Amikor egy updategram egy -type oszlopot tartalmazó IDENTITYtáblába szúr be egy rekordot, az updategram az opcionális updg:at-identity attribútum használatával rögzítheti a rendszer által hozzárendelt értéket. Az updategram ezután használhatja ezt az értéket a későbbi műveletekben. Az updategram végrehajtásakor az attribútum megadásával visszaadhatja a létrehozott identitásértéket updg:returnid .

updg:guid attribútum

Az updg:guid attribútum egy nem kötelező attribútum, amely globálisan egyedi azonosítót hoz létre. Ez az érték a teljes <sync> blokk hatókörében marad, amelyben meg van adva. Ezt az értéket bárhol használhatja a <sync> blokkban. Az attribútum meghívja az NEWGUID() SQL Server-függvényt az egyedi azonosító létrehozásához.

Példák

Ha az alábbi példák alapján szeretne munkamintákat létrehozni, meg kell felelnie az SQLXML-példák futtatására vonatkozó követelményeknek.

Az updategram-példák használata előtt fontolja meg a következő szempontokat:

A. Rekord beszúrása updategram használatával

Ez az attribútumcentrikus updategram egy rekordot szúr be az HumanResources.EmployeeAdventureWorks2025 adatbázis táblájában.

Ebben a példában az updategram nem ad meg leképezési sémát. Ezért az updategram alapértelmezett leképezést használ, amelyben az elemnév egy táblanévre, az attribútumok és a gyermekelemek pedig a tábla oszlopaihoz lesznek leképezve.

A AdventureWorks2025 HumanResources.Department tábla sémája minden oszlopra "nem null" korlátozást ír elő. Ezért az updategramnak tartalmaznia kell az összes oszlophoz megadott értékeket. A DepartmentID egy IDENTITY-type oszlop. Ezért nincs megadva érték.

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

Minta XPath-lekérdezés tesztelése a sémán

  1. Másolja ki az előző updategramot, és illessze be egy szövegfájlba. Mentse a fájlt MyUpdategram.xml néven.

  2. Hozza létre és használja az SQLXML 4.0 tesztszkriptet (Sqlxml4test.vbs) a sablon végrehajtásához.

    További információ: SqlXML 4.0-lekérdezések végrehajtása az ADO használatával.

Egy elemközpontú leképezésben az updategram a következőképpen néz ki:

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

Vegyes módban (elem-központú és attribútumcentrikus) updategramban egy elem attribútumokkal és alelemekkel is rendelkezhet, ahogyan az ebben az updategramban látható:

<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. Több rekord beszúrása updategram használatával

Ez az updategram két új műszakrekordot ad hozzá a HumanResources.Shift táblához. Az updategram nem adja meg az opcionális <before> blokkot.

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

Minta XPath-lekérdezés tesztelése a sémán

  1. Másolja ki az előző updategramot, és illessze be egy szövegfájlba. Mentse a fájlt Updategram-AddShifts.xml néven.

  2. Hozza létre és használja az SQLXML 4.0 tesztszkriptet (Sqlxml4test.vbs) a sablon végrehajtásához.

    További információ: SqlXML 4.0-lekérdezések végrehajtása az ADO használatával.

A példa egy másik verziója egy updategram, amely két különálló <after> blokkot használ egy blokk helyett a két alkalmazott beszúrásához. Ez érvényes, és a következőképpen kódolható:

<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. Az XML-ben érvénytelen érvényes SQL Server-karakterek használata

Az SQL Serverben a táblanevek tartalmazhatnak szóközt, például a Northwind-adatbázisban található Rendelés részletei táblát. Ez azonban nem érvényes olyan XML-karakterekben, amelyek érvényes SQL Server-azonosítók, de nem érvényes XML-azonosítók, kódolási értékként kódolhatók _xHHHH_ , ahol HHHH a karakter négyjegyű hexadecimális UCS-2 kódját jelöli a legfontosabb bit-első sorrendben.

Megjegyzés:

Ez a példa a Northwind-adatbázist használja. A Northwind-adatbázist a Microsoft webhelyéről letölthető SQL-szkripttel telepítheti.

Emellett az elem nevét szögletes zárójelek közé kell foglalni ([ ]). Mivel a [és] karakterek nem érvényesek XML-ben, kódolnia kell őket _x005B__x005D_, és így is. (Ha leképezési sémát használ, megadhat olyan elemneveket, amelyek nem tartalmaznak érvénytelen karaktereket, például üres szóközöket. A leképezési séma elvégzi a szükséges leképezést; ezért nem kell kódolnia ezekhez a karakterekhez).

Ez az updategram hozzáad egy rekordot a Northwind-adatbázisban található Rendelés részletei táblához:

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

A Rendelés részletei tábla UnitPrice oszlopa pénztípusú . A megfelelő típuskonvertálás alkalmazásához ( sztringtípustólpénztípusig ) a dollárjel karaktert ($) hozzá kell adni az érték részeként. Ha az updategram nem ad meg leképezési sémát, a rendszer kiértékeli a sztringérték első karakterét. Ha az első karakter egy dollárjel ($), a megfelelő konverzió lesz alkalmazva.

Ha az updategram egy olyan leképezési sémához van megadva, amelyben az oszlop megfelelően van megjelölve, dt:type="fixed.14.4" vagy sql:datatype="money"a dollárjel ($) nem szükséges, és az átalakítást a leképezés kezeli. Ez az ajánlott módja annak, hogy a megfelelő típusátalakítás történjen.

Minta XPath-lekérdezés tesztelése a sémán

  1. Másolja ki az előző updategramot, és illessze be egy szövegfájlba. Mentse a fájlt UpdategramSpacesInTableName.xml néven.

  2. Hozza létre és használja az SQLXML 4.0 tesztszkriptet (Sqlxml4test.vbs) a sablon végrehajtásához.

    További információ: SqlXML 4.0-lekérdezések végrehajtása az ADO használatával.

D. Az at-identity attribútummal lekérheti az IDENTITÁS típusú oszlopba beszúrt értéket

A következő updategram két rekordot szúr be: egyet a Sales.SalesOrderHeader táblába, egy másikat a Sales.SalesOrderDetail táblába.

Először az updategram hozzáad egy rekordot a Sales.SalesOrderHeader táblához. Ebben a táblázatban a SalesOrderID oszlop egy IDENTITY-type oszlop. Ezért amikor hozzáadja ezt a rekordot a táblához, az updategram az at-identity attribútum használatával rögzíti a hozzárendelt SalesOrderID értéket "x" (helyőrző érték) értékként. Az Updategram ezután ezt at-identity a változót adja meg a Sales.SalesOrderDetail< elem SalesOrderID attribútumának >értékeként.

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

Ha az attribútum által updg:at-identity létrehozott identitásértéket szeretné visszaadni, használhatja az updg:returnid attribútumot. Az alábbi példa egy módosított updategram, amely ezt az identitásértéket adja vissza. (Ez az updategram két rendelési rekordot és két rendelési részletes rekordot ad hozzá, hogy a példa egy kicsit összetettebb legyen.)

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

Az updategram végrehajtásakor a következő példához hasonló eredményeket ad vissza, amely tartalmazza a létrehozott identitásértéket (a táblaidentitáshoz használt ShiftID oszlop generált értékét):

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <returnid>
    <x>4</x>
    <y>5</y>
  </returnid>
</ROOT>

Minta XPath-lekérdezés tesztelése a sémán

  1. Másolja ki az előző updategramot, és illessze be egy szövegfájlba. Mentse a fájlt Updategram-returnId.xml néven.

  2. Hozza létre és használja az SQLXML 4.0 tesztszkriptet (Sqlxml4test.vbs) a sablon végrehajtásához.

    További információ: SqlXML 4.0-lekérdezések végrehajtása az ADO használatával.

E. Egyedi érték létrehozása az updg:guid attribútum használatával

Ebben a példában az updategram beszúr egy rekordot a Cust és a CustOrder táblákba. Az updategram emellett egy egyedi értéket is létrehoz a CustomerID attribútumhoz az updg:guid attribútum használatával.

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

Az updategram megadja az returnid attribútumot. Ennek eredményeként a rendszer visszaadja a létrehozott GUID-t:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <returnid>
    <x>7111BD1A-7F0B-4CEE-B411-260DADFEFA2A</x>
  </returnid>
</ROOT>

Az updategram tesztelése

  1. Másolja ki az előző updategramot, és illessze be egy szövegfájlba. Mentse a fájlt Updategram-GenerateGuid.xml néven.

  2. Hozza létre a következő táblázatokat:

    USE tempdb;
    
    CREATE TABLE Cust
    (
        CustID UNIQUEIDENTIFIER,
        LastName VARCHAR (20)
    );
    
    CREATE TABLE CustOrder
    (
        CustID UNIQUEIDENTIFIER,
        OrderID INT
    );
    
  3. Hozza létre és használja az SQLXML 4.0 tesztszkriptet (Sqlxml4test.vbs) a sablon végrehajtásához.

    További információ: SqlXML 4.0-lekérdezések végrehajtása az ADO használatával.

F. Séma megadása egy updategramban

A példában szereplő updategram egy rekordot szúr be a következő táblázatba:

CustOrder(OrderID, EmployeeID, OrderType)

Ebben az updategramban XSD-séma van megadva (vagyis az updategram elemeinek és attribútumainak nincs alapértelmezett leképezése). A séma biztosítja az elemek és attribútumok szükséges leképezését az adatbázistáblákhoz és -oszlopokhoz.

Az alábbi séma (CustOrderSchema.xml) egy <CustOrder> olyan elemet ír le, amely az és az OrderIDEmployeeID attribútumokból áll. A séma érdekesebbé tétele érdekében egy alapértelmezett érték van hozzárendelve az EmployeeID attribútumhoz. Az updategram egy attribútum alapértelmezett értékét csak a beszúrási műveletekhez használja, majd csak akkor, ha az updategram nem adja meg ezt az attribútumot.

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

Ez az updategram beszúr egy rekordot a CustOrder táblába. Az updategram csak az OrderID és az EmployeeID attribútum értékeit adja meg. Nem adja meg az OrderType attribútum értékét. Ezért az updategram az előző sémában megadott EmployeeID attribútum alapértelmezett értékét használja.

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

A leképezési sémát meghatározó updategramokra további példákat az Updategramban (SQLXML 4.0) található jegyzetekkel ellátott leképezési séma megadása című témakörben talál.

Az updategram tesztelése

  1. Hozza létre ezt a táblát az tempdb adatbázisban:

    USE tempdb;
    
    CREATE TABLE CustOrder
    (
        OrderID INT,
        EmployeeID INT,
        OrderType INT
    );
    
  2. Másolja ki az előző sémát, és illessze be egy szövegfájlba. Mentse a fájlt CustOrderSchema.xml néven.

  3. Másolja ki az előző updategramot, és illessze be egy szövegfájlba. Mentse a fájlt ugyanabban a mappában, CustOrderUpdategram.xml amelyet az előző lépésben használt.

  4. Hozza létre és használja az SQLXML 4.0 tesztszkriptet (Sqlxml4test.vbs) az updategram végrehajtásához.

    További információ: SqlXML 4.0-lekérdezések végrehajtása az ADO használatával.

Ez a megfelelő XDR-séma:

<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. Null értékek beszúrása oszlopba az xsi:nil attribútummal

Ha null értéket szeretne beszúrni a táblázat megfelelő oszlopában, megadhatja az xsi:nil attribútumot egy updategram egyik elemén. A megfelelő XSD-sémában az XSD nillable attribútumot is meg kell adni.

Vegyük például ezt az XSD-sémát:

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

Az XSD-séma határozza meg nillable="true" az <fname> elemhez. A következő updategram ezt a sémát használja:

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

Az updategram megadja xsi:nil a <fname> blokk elemét <after> . Ezért az updategram végrehajtásakor a rendszer beszúr egy értéket NULL a táblázat first_name oszlopához.

Az updategram tesztelése

  1. Hozza létre a következő táblát az tempdb adatbázisban:

    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
    );
    GO
    
  2. Másolja ki az előző sémát, és illessze be egy szövegfájlba. Mentse a fájlt StudentSchema.xml néven.

  3. Másolja ki az előző updategramot, és illessze be egy szövegfájlba. Mentse a fájlt ugyanabban a mappában, StudentUpdategram.xml amelyet az előző lépésben használt a mentéshez StudentSchema.xml.

  4. Hozza létre és használja az SQLXML 4.0 tesztszkriptet (Sqlxml4test.vbs) az updategram végrehajtásához.

    További információ: SqlXML 4.0-lekérdezések végrehajtása az ADO használatával.

H. Névterek megadása egy updategramban

Az updategramban lehetnek olyan elemek, amelyek az updategram ugyanazon elemében deklarált névtérhez tartoznak. Ebben az esetben a megfelelő sémának ugyanazt a névteret is deklarálnia kell, és az elemnek a célnévtérhez kell tartoznia.

Például a következő updategramban (UpdateGram-ElementHavingNamespace.xml) az <Order> elem az elemben deklarált névtérhez tartozik.

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

Ebben az esetben a sémának deklarálnia kell a névteret is a sémában látható módon:

Az alábbi séma (XSD-ElementHavingNamespace.xml) bemutatja, hogyan kell deklarálni a megfelelő elemet és attribútumokat.

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

Az updategram tesztelése

  1. Másolja ki az előző sémát, és illessze be egy szövegfájlba. Mentse a fájlt XSD-ElementHavingNamespace.xml néven.

  2. Másolja ki az előző updategramot, és illessze be egy szövegfájlba. Mentse a fájlt ugyanabban a mappában, Updategram-ElementHavingNamespace.xml amelyet a mentéshez XSD-ElementHavingnamespace.xmlhasznált.

  3. Hozza létre és használja az SQLXML 4.0 tesztszkriptet (Sqlxml4test.vbs) az updategram végrehajtásához.

    További információ: SqlXML 4.0-lekérdezések végrehajtása az ADO használatával.

I. Adatok beszúrása XML-adattípus-oszlopba

Az updategramokkal az alábbi szempontokat figyelembe véve szúrhat be és frissíthet xml adattípusú oszlopokban tárolt adatokat:

  • Az XML-oszlop nem használható meglévő sor azonosítására. Ezért nem vehető fel az updg:before updategram szakaszába.

  • Az XML-oszlopba beszúrt XML-töredék hatókörébe tartozó névterek megmaradnak, és a névtér deklarációi a beszúrt töredék felső eleméhez lesznek hozzáadva.

Például a következő updategramban (SampleUpdateGram.xml) az <Desc> elem frissíti a ProductDescription oszlopot a mintaadatbázis Production>productModel táblájában AdventureWorks2025 . Ennek az updategramnak az eredménye, hogy a ProductDescription oszlop XML-tartalma frissül az <Desc> elem XML-tartalmával.

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

Az updategram a következő jegyzetekkel ellátott XSD-sémára (SampleSchema.xml) hivatkozik.

<?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>
Az updategram tesztelése
  1. Másolja ki az előző sémát, és illessze be egy szövegfájlba. Mentse a fájlt XSD-SampleSchema.xml néven.

    Megjegyzés:

    Mivel az updategramok támogatják az alapértelmezett leképezést, nem lehet azonosítani az XML-adattípus elejét és végét. Ez gyakorlatilag azt jelenti, hogy xml-adattípusú oszlopokkal rendelkező táblák beszúrásához vagy frissítéséhez leképezési sémára van szükség. Ha nincs megadva séma, az SQLXML hibát ad vissza, amely azt jelzi, hogy az egyik oszlop hiányzik a táblából.

  2. Másolja ki az előző updategramot, és illessze be egy szövegfájlba. Mentse a fájlt ugyanabban a mappában, SampleUpdategram.xml amelyet a mentéshez SampleSchema.xmlhasznált.

  3. Hozza létre és használja az SQLXML 4.0 tesztszkriptet (Sqlxml4test.vbs) az updategram végrehajtásához.

    További információ: SqlXML 4.0-lekérdezések végrehajtása az ADO használatával.