Udostępnij przez


Wprowadzenie do Updategrams (SQLXML 4.0)

You can modify (insert, update, or delete) a database in Microsoft SQL Server from an existing XML document by using an updategram or the OPENXML Transact-SQL function.

Funkcja OPENXML modyfikuje bazę danych rozdrabniania istniejącego dokumentu XML i podając zestawu zestaw wierszy, które mogą być przekazywane do INSERT, UPDATE, lub Instrukcja DELETE.Z OPENXML operacje są dokonywane bezpośrednio przed tabel bazy danych.W związku z tym OPENXML jest najbardziej odpowiedni wszędzie tam, gdzie dostawców zestawu zestaw wierszy, takich jak tabela, mogą być wyświetlane jako urządzenie źródłowe.

Podobnie jak OPENXML, an updategram umożliwia wstawianie, aktualizowanie lub usuwanie danych w bazie danych; jednak updategram działa przed widoków XML dostarczonych wraz z adnotacjami XSD (lub XDR) schematu; na przykład, aktualizacje są stosowane do XML widoku oferowanego przez mapowanie schematu.Mapowanie schematu, z kolei zawiera informacje potrzebne do mapowania elementów języka XML i atrybuty do odpowiednich tabel bazy danych i kolumn.The updategram informacje mapowania są używane do aktualizacji bazy danych, tabel i kolumn.

Uwaga

W tej dokumentacji zakłada się, że czytelnik jest obeznany z szablonów i mapowanie schematu nie obsługuje w SQL Server. Aby uzyskać więcej informacji zobaczWprowadzenie do adnotacjami schematy XSD (SQLXML 4.0).W przypadku starszych aplikacji, które używają XDR zobacz Adnotacjami schematy XDR (zaniechana w SQLXML 4.0).

Wymagane obszarów nazw w Updategram

Słowa kluczowe w updategram, takich jak <sync>, <before>, a <after>, istnieją w urn:schemas-microsoft-com:xml-updategram obszar nazw. Prefiks obszaru nazw, który używany jest dowolny.W tej dokumentacji updg Określa prefiks updategram obszar nazw.

Przeglądanie składni

An updategram jest szablon z <sync>, <before>, a <after> bloki, które tworzą składnia updategram. W poniższym kodzie pokazano następującej składni w swojej najprostszej formie:

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

Następujące definicje opis roli każdego z tych bloków:

  • <before>
    Identyfikuje stan istniejących (nazywane również "przed stan") wystąpienie rekordu.

  • <after>
    Określa nowy stan, do którego ma zostać zmienione dane.

  • <sync>
    Zawiera <before> i <after> bloki. A <sync> Blok może zawierać więcej niż jeden zestaw <before> i <after> bloki. Jeśli istnieje więcej niż jeden zestaw <before> i <after> bloki, te bloki (nawet jeśli są puste) musi być określona jako pary. Ponadto updategram może mieć więcej niż jeden <sync> blok. Każdy <sync> blok jest jednostki transakcji (co oznacza, że albo wszystkie elementy w <sync> blok jest wykonywana lub nic się nie odbywa się). Jeżeli podano wiele <sync> bloki w updategram, uszkodzenie jednej <sync> Blok nie ma wpływu na drugi <sync> bloki.

Czy updategram usuwa, wstawia lub aktualizuje wystąpienie rekordów zależy od zawartości <before> i <after> bloki:

  • Jeśli wystąpienie rekord jest wyświetlany tylko w <before> Blok nie odpowiednie wystąpienie <after> blok, the updategram wykonuje operację usuwania.

  • Jeśli wystąpienie rekord jest wyświetlany tylko w <after> Blok nie odpowiednie wystąpienie <before> blok, jest operacją insert.

  • Jeśli wystąpienie rekordu znajduje się w <before> Blokowanie i odpowiadające im wystąpienie w <after> blok, jest on operacji aktualizacji. W takim przypadek updategram aktualizuje wystąpienie rekordu na wartości, które są określone w <after> blok.

Określanie mapowania schematu w Updategram

W updategram, dostarczonego przez schemat mapowania pozyskiwania XML (obsługiwane są schematy XSD i XDR) może być bezpośrednia lub pośrednia (to znaczy updategram mogą pracować z lub bez schematu określonego mapowania).Jeżeli nie określono mapowania schematu, the updategram zakłada niejawny mapowanie (Mapowanie domyślne), gdzie każdy element w <before> Blokowanie lub <after> blok jest mapowany na tabela i element podrzędność każdy element lub atrybut jest mapowany do kolumna w bazie danych. Jeśli zostanie jawnie określone schematu mapowania elementów i atrybutów w updategram muszą odpowiadać elementy i atrybuty w schemacie mapowania.

Mapowanie niejawna (domyślnie)

W większości przypadków updategram, dokonuje aktualizacji proste nie mogą wymagać schematu mapowania.W takim przypadek updategram zależy od domyślnego mapowania schematu.

Następujące updategram demonstruje niejawny mapowanie.W tym przykładzie updategram wstawia nowego odbiorcy w tabela Sales.Customer.Ponieważ ta updategram używa niejawny mapowanie, <Sales.Customer> element jest mapowany do tabela Sales.Customer i odpowiadające im kolumny w tabela Sales.Customer mapowania atrybutów identyfikator klienta i SalesPersonID.

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

Jawne mapowania

Jeżeli określono mapowania schematu (XSD lub XDR), the updategram używa schematu, aby określić tabele bazy danych i kolumny, które mają być aktualizowane.

Jeśli updategram wykonuje złożonych aktualizacji (na przykład wstawianie rekordów w wielu tabel w oparciu o relacji nadrzędny podrzędność, która jest określona w schemacie mapowanie), należy jawnie zapewnić mapowanie schematu przy użyciu mapping-schema atrybut, w którym wykonuje updategram.

Ponieważ updategram jest szablon, ścieżka określona dla mapowania schematu w updategram jest odwołują się względnie do lokalizacji pliku szablonu (do przechowywania updategram).Aby uzyskać więcej informacji zobaczOkreślanie adnotacjami mapowanie schematu w Updategram (SQLXML 4.0).

Zorientowany na element i atrybut zorientowany mapowania w Updategrams

Domyślne mapowania (jeżeli nie określono mapowania schematu w updategram), mapa updategram elementów do tabel i elementy podrzędność (z wyjątkiem zorientowane na element mapowanie) i mapowania atrybutów (z wyjątkiem zorientowane na atrybut mapowanie) do kolumn.

Mapowanie zorientowane na element

W updategram zorientowany elementu element zawiera elementy podrzędność, które wyznaczają właściwości elementu.Na przykład można znaleźć w następujących updategram.The <Person.Contact> element contains the **<FirstName>**and <LastName> podrzędność elements. Te elementy podrzędność są właściwości <Person.Contact> element.

Ponieważ ta updategram nie określono mapowania schematu, the updategram używa niejawny mapowanie, gdzie <Person.Contact> element jest mapowany do tabela Person.Contact i jego elementów podrzędność mapować kolumn Imię i nazwisko.

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

Zorientowany atrybut mapowania.

W mapowanie zorientowany atrybut elementów mają atrybuty.Następujące updategram używa zorientowany atrybut mapowania.W tym przykładzie <Person.Contact> element składa się z Imię and Nazwisko atrybuty.Te atrybuty są właściwości <Person.Contact> element. Podobnie jak w poprzednim przykładzie, ten updategram określa nie schematu mapowania tak opiera się na niejawny mapowanie, aby mapować <Person.Contact> Element tabela Person.Contact i atrybuty elementu do odpowiednich kolumn w tabela.

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

Za pomocą obu zorientowane na element i zorientowany atrybut mapowania.

Kombinacja zorientowane na element i zorientowany atrybut mapowania, można określić, jak pokazano w następującym updategram.Zwróć uwagę, że <Person.Contact> element zawiera zarówno atrybut, jak i element podrzędność. Ponadto ta updategram opiera się na niejawny mapowanie.W ten sposób Imię atrybut a <Nazwisko> Mapa elementu podrzędnego z odpowiednimi kolumnami w tabela 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>

Praca z znaki prawidłowe w programie SQL Server, ale nieprawidłowy w formacie XML

W SQL Server, nazwy tabel mogą zawierać spacji. Jednak ten rodzaj Nazwa tabela jest nieprawidłowa w formacie XML.

Do kodowania znaków, które są prawidłowe SQL Server identyfikatory ale nie są prawidłowe identyfikatory XML, należy użyć '__xHHHH__' jako wartości kodowania, gdzie gggg oznacza czterocyfrowy UCS-2 kodu szesnastkowego znaku w kolejności najbardziej znaczący bit pierwszego. Korzystając z tego schematu kodowania, spacja zostanie zastąpiony 0020 x (4 cyfrowy szesnastkowy kod znaku spacji); w ten sposób nazwa [SzczegółyZamówień] w tabela SQL Server staje się _x005B_Order_x0020_Details_x005D_ w formacie XML.

Podobnie trzeba określić nazwy trzech części elementów, takich jak <[bazy danych]. [właściciela]. [tabela]>. Uchwytach znaków ([]) nie są prawidłowe w formacie XML, dlatego należy określić, to jako <_x005B_database_x005D_._x005B_owner_x005D_._x005B_table_x005D_>, gdzie jest _x005B_ kodowania dla lewego nawiasu ([]), a _x005D_ jest kodowanie prawy nawias kwadratowy (]).

Wykonywanie Updategrams

Ponieważ updategram jest szablon, wszystkie mechanizmy przetwarzania szablon dotyczy updategram.SQLXML 4.0, to możesz wykonać an updategram przy użyciu jednego z następujących sposobów:

  • Przesyłając je w poleceniu ADO.

  • Przesyłając go jak polecenie OLE DB.