Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Meglévő XML-dokumentumból módosíthatja (szúrhatja be, frissítheti vagy törölheti) a Microsoft SQL Server adatbázisát egy updategram vagy az OPENXML Transact-SQL függvény használatával.
Az OPENXML függvény módosítja az adatbázist azzal, hogy széttöri a meglévő XML dokumentumot, és egy sorhalmazt biztosít, amely átadható egy INSERT, UPDATE vagy DELETE utasításnak. Az OPENXML esetében a műveleteket közvetlenül az adatbázis táblái ellen végzik. Ezért az OPENXML a legmegfelelőbb hely, ahol sorhalmaz szolgáltatók, például egy tábla forrásként megjelenhetnek.
Akárcsak az OPENXML, a updategram lehetővé teszi, hogy adatokat beilless, frissítsünk vagy töröljünk az adatbázisból; azonban egy updategram az annotált XSD (vagy egy XDR) séma által biztosított XML nézetekkel ellen működik; például a frissítéseket az XML nézetre alkalmazzák, amelyet a leképezési séma biztosít. A leképezési séma viszont rendelkezik azokkal a szükséges információkkal az XML elemek és attribútumok hozzárendeléséhez a megfelelő adatbázis táblákhoz és oszlopokhoz. A updategram ezt a leképezési információt használja az adatbázis tábláinak és oszlopainak frissítésére.
Megjegyzés:
Ez a dokumentáció feltételezi, hogy ismered a sablonokat és a térképezési séma támogatást az SQL Serverben. További információért lásd: Bevezetés az annotált XSD sémákhoz (SQLXML 4.0). Az XDR-t használó régi alkalmazásokért lásd: Annotált XDR sémák (az SQLXML 4.0-ban elavult).
Szükséges névterek a Updategramban
Az updategram kulcsszavak, mint <például sync>, <before> és <after>, az urn:schemas-microsoft-com:xml-updategram névtérben találhatók. A névtér előtagja, amit használsz, tetszőleges. Ebben a dokumentációban az updg előtag az updategram névteret jelöli.
Szintaxis felülvizsgálata
Az updategram egy sablon, amely <szinkronizálja>, <előtte> és <után> blokkokat tartalmaz, amelyek az updategram szintaxisát alkotják. A következő kód ezt a szintaxist a legegyszerűbb formájában mutatja:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync [mapping-schema= "AnnotatedSchemaFile.xml"] >
<updg:before>
...
</updg:before>
<updg:after>
...
</updg:after>
</updg:sync>
</ROOT>
Az alábbi definíciók írják le ezeknek a blokkoknak a szerepét:
<előtt>
Azonosítja a rekordpéldány meglévő állapotát (más néven "az előtti állapot").
<után>
Azonosítja az új állapotot, amelyre az adatokat kell módosítani.
<szinkronizál>
Tartalmazza az <előtte> és <után> blokkokat. Egy <szinkronblokk> több előtte> és utána blokkot< is tartalmazhat.>< Ha több előtte> és utána blokk halmaza< van, ezeket a blokkokat (még ha üresek is) párosként kell megadni.>< Továbbá egy updategram több <szinkronizálási> blokkot is tartalmazhat. Minden <szinkronblokk> egy tranzakciós egység (ami azt jelenti, hogy vagy minden a <szinkronblokkban> véget ér, vagy semmi sem történik). Ha több <szinkronblokkot> jelölsz meg egy updategramban, az egyik <szinkronblokk> hibája nem befolyásolja a többi <szinkronblokkot> .
Az, hogy egy updategram töröl, beilleszti vagy frissíti a rekordpéldányt, az az előtti> és utána blokkok tartalmától< függ:><
Ha egy rekordpéldány csak az előtti<> blokkban jelenik meg, és nincs megfelelő példány az <utáni> blokkban, a updategram törlési műveletet hajt végre.
Ha egy rekordpéldány csak az< utána> blokkban jelenik meg, és nincs megfelelő példány az <előtti> blokkban, akkor az egy beszekesztési művelet.
Ha egy rekordpéldány megjelenik az előtti<> blokkban, és van hozzá tartozó példány az <utáni> blokkban, az frissítési művelet. Ebben az esetben a updategram frissíti a rekordpéldányt az after> blokkban megadott< értékekre.
A leképezési séma megadása a Updategramban
Egy updategramban az XML absztrakció, amelyet egy leképezési séma biztosít (mind az XSD, mind az XDR sémák támogatottak) lehet implicit vagy explicit (azaz egy updategram működhet meghatározott leképezési sémával vagy anélkül). Ha nem határozsz meg leképezési sémát, a updategram implicit leképezést (alapértelmezett leképezést) feltételez, ahol minden elem az <előtti> vagy <utáni> blokkban egy táblához fordul, és minden elem gyermekeleme vagy attribútumja egy oszlophoz kapcsolódik az adatbázisban. Ha kifejezetten megadsz egy leképezési sémát, akkor a updategram elemeinek és attribútumainak egyezniük kell a leképezési séma elemeivel és attribútumaival.
Implicit (alapértelmezett) leképezés
A legtöbb esetben egy egyszerű frissítéseket végrehajtó updategram nem igényel leképezési sémát. Ebben az esetben a updategram az alapértelmezett leképezési sémára támaszkodik.
A következő updategram implicit leképezést mutat be. Ebben a példában a updategram új ügyfelet helyez be az Sales.Customer táblába. Mivel ez a updategram implicit leképezést használ, a <Sales.Customer> elem a Sales.Customer táblához fordul, míg a CustomerID és SalesPersonID attribútumok a Sales.Customer tábla megfelelő oszlopaihoz fordulnak.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync >
<updg:before>
</updg:before>
<updg:after>
<Sales.Customer CustomerID="1" SalesPersonID="277" />
</updg:after>
</updg:sync>
</ROOT>
Explicit leképezés
Ha megadsz egy leképezési sémát (vagy XSD-t, vagy XDR-t), a updategram a sémát használja az adatbázis tábláinak és oszlopainak meghatározására, amelyeket frissíteni kell.
Ha az updategram összetett frissítést végez (például több táblába helyez be rekordokat a leképezési séma által meghatározott szülő-gyermek kapcsolat alapján), akkor kifejezetten meg kell adnod a leképezési sémát a mapping-séma attribútummal kell megadni, amelyhez az updategram fut.
Mivel az updategram sablon, a updategramban a leképezési sémához megadott út a sablonfájl helyéhez viszonyítva (a updategram tárolásához képest). További információért lásd: Annotált leképezési séma meghatározása egy Updategramban (SQLXML 4.0).
Elemközpontú és attribútumközpontú leképezés az updategramokban
Az alapértelmezett leképezéssel (amikor a leképezési séma nincs megadva a updategramban) az updategram elemek táblázatokhoz fordulnak, a gyermekelemek (elemközpontú leképezés esetén), az attribútumok pedig (attribútumcentrikus leképezés esetén) oszlopokhoz fordulnak.
Elemközpontú leképezés
Egy elemközpontú updategramban egy elem olyan gyermekelemeket tartalmaz, amelyek az elem tulajdonságait jelölik. Példaként lásd a következő updategramot. A< Person.Contact> elem tartalmazza a <Keresztnév> és <Vezetéknév> gyermek elemeket. Ezek a gyermekelemek a Person.Contact> elem tulajdonságai<.
Mivel ez a updategram nem határoz meg leképezési sémát, az updategram implicit leképezést használ, ahol a< Person.Contact> elem a Person.Contact táblára leképezik, a gyermekelemei pedig a Keresztnév és Vezetéknév oszlopokra egyeznek.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync >
<updg:after>
<Person.Contact>
<FirstName>Catherine</FirstName>
<LastName>Abel</LastName>
</Person.Contact>
</updg:after>
</updg:sync>
</ROOT>
Attribútumcentrikus leképezés
Egy attribútumcentrikus leképezésben az elemek attribútumokkal rendelkeznek. A következő updategram attribútumcentrikus leképezést használ. Ebben a példában a <Person.Contact> elem a Keresztnév és Vezetéknév attribútumokból áll. Ezek a tulajdonságok a Person.Contact> elem tulajdonságai<. Ahogy az előző példában is, ez a updategram nem határoz meg leképezési sémát, így implicit leképezésre támaszkodik, hogy a <Person.Contact> elemet a Person.Contact táblára, az elem attribútumjait pedig a tábla megfelelő oszlopaira képezze.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync >
<updg:before>
</updg:before>
<updg:after>
<Person.Contact FirstName="Catherine" LastName="Abel" />
</updg:after>
</updg:sync>
</ROOT>
Elemközpontú és attribútumközpontú leképezés alkalmazása
Megadhatsz elemközpontú és attribútumcentrikus leképezés keverékét, ahogy az alábbi updategramban látható. Figyeld meg, hogy a< Person.Contact> elem tartalmaz egy attribútumot és egy gyermekelemet is. Ez a updategram az implicit leképezésre is támaszkodik. Így a Keresztnév attribútum és a <Vezetéknév> gyermek elem a Person.Contact tábla megfelelő oszlopaihoz fordul.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync >
<updg:before>
</updg:before>
<updg:after>
<Person.Contact FirstName="Catherine" >
<LastName>Abel</LastName>
</Person.Contact>
</updg:after>
</updg:sync>
</ROOT>
SQL Serverben érvényes karakterekkel dolgozni, de XML-ben nem érvényes karakterekkel
Az SQL Serverben a táblanevek tartalmazhatnak egy szóközet. Azonban ez a típusú táblanév XML-ben nem érvényes.
Ha olyan karaktereket kódolunk, amelyek érvényes SQL Server azonosítók, de nem érvényesek XML azonosítók, használjuk a '__xHHHH__'-t kódolási értékként, ahol a HHHH a négy jegyű hexadecimális UCS-2 kódot jelenti a legjelentősebb bit-első sorrendben lévő karakter számára. Ezzel a kódolási sémával egy szóköz karaktert x0020-ra (a négyjegyű hexadecimális kód a szóköz karakterére) cserélünk; így az SQL Serverben a tábla neve [Order Details] XML-ben _x005B_Order_x0020_Details_x005D_ lesz.
Hasonlóképpen, háromrészes elemneveket is meg kell határoznod, például <[adatbázis].[ tulajdonos. [asztal]>. Mivel a zárójel karakterek ([ és ]) XML-ben nem érvényesek, ezt meg kell határoznod: <_x005B_database_x005D_._x005B_owner_x005D_._x005B_table_x005D_>, ahol _x005B_ a bal zárójel ([) kódolása, _x005D_ a jobb zárójel (]) kódolása.
Frissítési gramok végrehajtása
Mivel az updategram sablon, a sablon összes feldolgozási mechanizmusa érvényes az updategramra. SQLXML 4.0 esetén az alábbi módokon futtathatod az updategramot:
ADO parancsban történő beküldésével.
OLE DB parancsként beküldve.