Sdílet prostřednictvím


Úvod do Updategramů (SQLXML 4.0)

platí pro:SQL Serverazure SQL Database

Databázi v Microsoft SQL Serveru můžete upravit (vložit, aktualizovat nebo odstranit) z existujícího dokumentu XML pomocí aktualgramu nebo funkce Transact-SQL OPENXML.

Funkce OPENXML upravuje databázi tím, že skartuje existující XML dokument a poskytuje sadu řádků, kterou lze předat příkazům INSERT, UPDATE nebo DELETE. U OPENXML jsou operace prováděny přímo nad databázovými tabulkami. Proto je OPENXML nejvhodnější tam, kde se poskytovatelé řádků, například tabulka, mohou objevit jako zdroj.

Stejně jako OPENXML vám updategram umožňuje vkládat, aktualizovat nebo mazat data z databáze; avšak updategram působí proti XML pohledům poskytovaným anotovaným schématem XSD (nebo XDR); například aktualizace jsou aplikovány na XML zobrazení poskytované mapovacím schématem. Mapovací schéma má zase potřebné informace k mapování XML prvků a atributů na odpovídající databázové tabulky a sloupce. Updategram využívá tyto mapovací informace k aktualizaci databázových tabulek a sloupců.

Poznámka:

Tato dokumentace předpokládá, že znáte šablony a podporu mapovacích schémat v SQL Serveru. Pro více informací viz Úvod do anotovaných XSD schémat (SQLXML 4.0). Pro starší aplikace, které používají XDR, viz Annotated XDR Schemas (zastaralé v SQLXML 4.0).

Požadované jmenné prostory v Updategramu

Klíčová slova v updategramu, jako <synchronizace>, <před> a <po>, existují v jmenném prostoru urn:schemas-microsoft-com:xml-updategram . Předpona jmenného prostoru, kterou používáte, je libovolná. V této dokumentaci označuje prefix updg název updategram .

Recenze syntaxe

Updategram je šablona s <bloky synchronizace>, <před> a <po,> které tvoří syntaxi updategramu. Následující kód ukazuje tuto syntaxi v její nejjednodušší podobě:

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

Následující definice popisují roli každého z těchto bloků:

<před>
Identifikuje existující stav (také nazývaný "stav před") instance záznamu.

<po>
Identifikuje nový stav, do kterého mají být data změněna.

<synchronizovat>
Obsahuje bloky <před> a <po> . Synchronizační<> blok může obsahovat více než jednu sadu <bloků před> a <po>. Pokud existuje více než jedna sada <bloků před> a <po,> musí být tyto bloky (i když jsou prázdné) specifikovány jako dvojice. Navíc může mít updategram více než jeden<> synchronizační blok. Každý<> synchronizační blok je jedna jednotka transakce (což znamená, že buď je vše v synchronizačním bloku<> hotové, nebo se nic neděje). Pokud v updategramu specifikujete více<> synchronizačních bloků, selhání jednoho<> synchronizačního bloku neovlivní ostatní<> synchronizační bloky.

Zda updategram smaže, vkládá nebo aktualizuje instanci záznamu, závisí na obsahu bloků <před> a <po> :

  • Pokud se instance záznamu objeví pouze v bloku <před> a v bloku <po záznamu> žádná odpovídající instance, updategram provede operaci mazání.

  • Pokud se instance záznamu objeví pouze v <>after bloku a v předním<> bloku žádná odpovídající instance, jedná se o vloženou operaci.

  • Pokud se instance záznamu objeví v bloku <před> a má odpovídající instanci v bloku <po,> jedná se o aktualizační operaci. V tomto případě aktualizační gram aktualizuje instanci záznamu na hodnoty uvedené v následném bloku<>.

Specifikace mapovacího schématu v Updategramu

V updategramu může být XML abstrakce poskytovaná mapovacím schématem (podporována schémata XSD i XDR) implicitní nebo explicitní (to znamená, že updategram může pracovat s nebo bez specifikovaného mapovacího schéma). Pokud nespecifikujete mapovací schéma, updategram předpokládá implicitní mapování (výchozí mapování), kde každý prvek v bloku <před> nebo <po> mapování mapuje na tabulku a jeho potomek nebo atribut se mapuje na sloupec v databázi. Pokud explicitně specifikujete mapovací schéma, prvky a atributy v updategramu musí odpovídat prvkům a atributům v mapovacím schématu.

Implicitní (výchozí) mapování

Ve většině případů aktualizační gram, který provádí jednoduché aktualizace, nemusí vyžadovat mapovací schéma. V tomto případě se updategram spoléhá na výchozí mapovací schéma.

Následující aktualizační gram demonstruje implicitní mapování. V tomto příkladu aktualizační gram vloží nového zákazníka do tabulky Sales.Customer (Prodeje.Zákazník). Protože tento updategram používá implicitní mapování, prvek <Sales.Customer> se mapuje na tabulku Sales.Customer a atributy CustomerID a SalesPersonID se mapují na odpovídající sloupce v tabulce Sales.Customer.

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

Explicitní zobrazení

Pokud určíte mapovací schéma (buď XSD nebo XDR), updategram použije schéma k určení databázových tabulek a sloupců, které mají být aktualizovány.

Pokud updategram provede složitou aktualizaci (například vkládání záznamů do více tabulek na základě vztahu rodič-potomek specifikovaného v mapovacím schématu), musíte mapovací schéma explicitně poskytnout pomocí atributu mapping-schema , proti kterému se updategram vykonává.

Protože updategram je šablona, cesta určená pro mapovací schéma v updategramu je relativní k umístění souboru šablony (vzhledem k tomu, kde je updategram uložen). Pro více informací viz Specifikace anotovaného mapovacího schématu v aktualizačním gramu (SQLXML 4.0).

Element-centrické a atributové mapování v Updategramech

Při výchozím mapování (když schéma mapování není specifikováno v updategramu) se prvky updategramu mapují na tabulky a podprvky (v případě mapování zaměřeného na elementy) a atributy (v případě mapování zaměřeného na atributy) se mapují na sloupce.

Element-centrické mapování

V elementově orientovaném updategramu obsahuje prvek podelementy, které označují vlastnosti daného prvku. Jako příklad viz následující updategram. Prvek <Person.Contact> obsahuje <podčlenné prvky FirstName> a <LastName> . Tyto podprvky jsou vlastnostmi prvku <Person.Contact> .

Protože tento updategram nespecifikuje mapovací schéma, používá implicitní mapování, kde prvek <Person.Contact> mapuje tabulku Person.Contact a její podprvky se mapují na sloupce FirstName a LastName.

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

Atributově orientované mapování

V atributově orientovaném mapování mají prvky atributy. Následující updategram používá mapování zaměřené na atributy. V tomto příkladu se prvek <Person.Contact> skládá z atributů FirstName a LastName . Tyto atributy jsou vlastnosti prvku <Person.Contact> . Stejně jako v předchozím příkladu tento updategram nespecifikuje žádné mapovací schéma, takže spoléhá na implicitní mapování k mapování <prvku Person.Contact> na tabulku Person.Contact a atributy tohoto prvku na příslušné sloupce v tabulce.

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

Použití jak elementárně-centrického, tak atribut-centrického mapování

Můžete specifikovat kombinaci mapování zaměřeného na prvky a atributy, jak je ukázáno v následujícím updategramu. Všimněte si, že prvek <Person.Contact> obsahuje jak atribut, tak podprvek. Navíc tento updategram spoléhá na implicitní mapování. Atributy FirstName a potomek LastName> se< tedy mapují na odpovídající sloupce v tabulce Person.Contact.

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

Práce se znaky platnými v SQL Serveru, ale neplatnými v XML

V SQL Serveru mohou názvy tabulek obsahovat i mezeru. Tento typ názvu tabulky však v XML není platný.

Pro zakódování znaků, které jsou platnými identifikátory SQL Serveru, ale nejsou platnými XML identifikátory, použijte jako kódovací hodnotu '__xHHHH__', kde HHHH znamená čtyřmístný hexadecimální kód UCS-2 pro znak v nejvýznamnějším pořadí bit-first. Při tomto kódovacím schématu je mezerník nahrazen znakem x0020 (čtyřmístný hexadecimální kód pro mezerník); proto se název tabulky [Order Details] v SQL Serveru stává _x005B_Order_x0020_Details_x005D_ v XML.

Podobně možná budete muset zadat názvy prvků ve třech částech, například <[database].[ majitel]. [stůl]>. Protože závorkové znaky ([ a ]) nejsou v XML platné, musíte to zadat jako <_x005B_database_x005D_._x005B_owner_x005D_._x005B_table_x005D_>, kde _x005B_ je kódování pro levý závorkový závorku ([) a _x005D_ je kódování pro pravý závorku (]).

Provádění aktualizačních gramů

Protože updategram je šablona, všechny zpracovatelské mechanismy šablony platí i pro updategram. Pro SQLXML 4.0 můžete aktualizační gram spustit jedním z následujících způsobů:

  • Odesláním příkazu ADO.

  • Odesláním jako příkazu OLE DB.

Viz také

Důležité informace o zabezpečení updategramu (SQLXML 4.0)