Wykonywanie kwerendy za pomocą OPENXML XML

OPENXML, Transact-SQL słowo kluczowe, zapewnia zestawu zestaw wierszy przez dokumentów XML w pamięci, które jest podobna do tabela lub widoku. OPENXML umożliwia uzyskanie dostępu do danych XML, jakby była relacyjnej zestawu zestaw wierszy.To nie zapewniając widok zestawu zestaw wierszy z reprezentacji wewnętrznej dokumentu XML.Rekordy w zestawie zestaw wierszy mogą być przechowywane w tabelach bazy danych.

OPENXML mogą być używane w instrukcji SELECT i SELECT INTO, ile zestaw wierszy dostawców, widoku lub OPENROWSET może się pojawić jako urządzenie źródłowe.Aby uzyskać informacje na temat składni OPENXML zobacz OPENXML (Transact-SQL).

Aby zapisać kwerendy przed dokumentem XML przy użyciu OPENXML, należy najpierw wywołać sp_xml_preparedocument.Analizuje dokument XML i zwraca uchwyt zanalizowano dokumentu, który jest gotowe do zużycia.Analizowane dokumentu jest reprezentacją drzewa model (DOM) obiektu dokumentu poszczególnych węzłów w dokumencie XML.Dojście do dokumentu jest przekazywana do OPENXML.OPENXML następnie udostępnia widok zestawu zestaw wierszy z dokumentu, na podstawie parametrów przekazanych do niego.

Uwaga

Zaczyna się od SQL Server 2005, sp_xml_preparedocument korzystają z wersja parsera MSXML Msxmlsql.dll. zaktualizowane SQL Ta wersja parsera MSXML został zaprojektowany do obsługi SQL Server i pozostaje zgodna z MSXML w wersji 2.6.

Reprezentacji wewnętrznej dokumentu XML muszą być usunięte z pamięci, wywołując sp_xml_removedocument systemu przechowywane procedury, aby zwolnić pamięć.

Na poniższej ilustracji pokazano proces.

Parsing XML with OPENXML

Należy zauważyć, że do zrozumienia OPENXML, wymagana jest znajomość kwerendy XPath i zrozumienia XML.Aby uzyskać więcej informacji na temat obsługi wyrażenie XPath w programie SQL Server zobacz Za pomocą kwerendy XPath w SQLXML 4.0.

Uwaga

OpenXML umożliwia wzorce wierszy i kolumna XPath do zostać sparametryzowana jako zmienne.Takie parametry może prowadzić do iniekcji wyrażenie XPath, jeśli programistę udostępnia parametryzacji dla użytkowników zewnętrznych (na przykład, jeśli parametry są dostarczane za pośrednictwem zewnętrznie o nazwie procedura przechowywana).Aby uniknąć takich potencjalnych problemów z zabezpieczeniami, zaleca się parametry XPath nigdy nie powinny być udostępniane dla zewnętrznego kodu.

Parametry OPENXML

Następujące parametry OPENXML:

  • (Dojście) dokumentu XMLidoc)

  • wyrażenie XPath do identyfikowania węzłów, które mają być mapowane do wierszy)rowpattern)

  • Opis zestawu zestaw wierszy ma być generowany

  • Mapowanie między kolumnami zestawu zestaw wierszy i węzłów XML

XML Document uchwytu (idoc)

Dojście do dokumentu jest zwracana przez sp_xml_preparedocument procedura przechowywana.

Wyrażenie XPath identyfikowanie węzły do być przetwarzane (rowpattern)

Wyrażenie XPath jako rowpattern identyfikuje zestaw węzłów w dokumencie XML.Każdy węzeł, który jest identyfikowany przez rowpattern odpowiada jeden wiersz w zestawie zestaw wierszy, który jest generowany przez OPENXML.

Węzły identyfikowane za pomocą wyrażenie XPath może być dowolny węzeł XML w dokumencie XML.Jeśli rowpattern identyfikuje zestaw elementów w dokumencie XML, jest jeden wiersz dla każdego węzła elementu zidentyfikować zestawu zestaw wierszy.Na przykład jeśli rowpattern kończy się w atrybucie, wiersz jest tworzony dla każdego węzła atrybut wybranych przez rowpattern.

Opis zestawu zestaw wierszy, aby być generowany

Schemat zestawu zestaw wierszy jest używana przez OPENXML Generowanie wynikowego zestawu zestaw wierszy.Można użyć następujących opcji, określając schematu zestawu zestaw wierszy.

Przy użyciu formatu krawędź tabela

Należy używać formatu krawędzi tabela do określenia schematu zestawu zestaw wierszy.Nie należy używać klauzula WITH.

Po wykonaniu tej czynności OPENXML zwraca zestawu zestaw wierszy w formacie tabela krawędzi.To jest nazywane do krawędzi tabela, ponieważ każdej krawędzi na drzewie zanalizowano dokument XML jest mapowany do zestaw wierszy w zestawie zestaw wierszy.

Krawędź tabela stanowią w jednej tabela szczegółowymi strukturę dokumentu XML.Ta struktura zawiera nazwy elementów i atrybut, hierarchii dokumentu, obszary nazw i instrukcje przetwarzania.Format tabela krawędzi pozwala uzyskać dodatkowe informacje, które nie jest dostępne za pośrednictwem metaproperties.Aby uzyskać więcej informacji na temat metaproperties Zobacz Określanie Metaproperties w OPENXML29bfd1c6-3f9a-43 c 4-924a-53d438e442f4.

Dodatkowe informacje podane przez tablicę krawędzi pozwala na przechowywanie i kwerendy typ danych elementu i atrybut i typ węzła i również są przechowywane i zbadać informacji na temat struktury dokumentu XML.W tym dodatkowe informacje mogą być również możliwość tworzenia własnego systemu zarządzania dokumentami XML.

Korzystając z tabela programu krawędzi, można napisać procedur przechowywanych, które dokumenty XML jako duży obiekt binarny (BLOB) do wprowadzania, wyprodukowania krawędzi tabela, a następnie wyodrębnić i analizować dokument poziom bardziej szczegółowe.Ten poziom szczegółowe mogą obejmować znajdowanie hierarchii dokumentu, nazwy elementów i atrybut, obszary nazw i instrukcje przetwarzania.

Krawędź tabela również może służyć jako format przechowywania dokumentów XML, gdy mapowanie do innych formatów relacyjnej nie jest logiczną i pole ntext nie dostarcza wystarczających informacji strukturalnych.

W sytuacjach, w których można użyć XML parser do badania dokumentu XML służy do krawędzi tabela zamiast uzyskać te same informacje.

W poniższej tabela opisano strukturę tabela krawędzi.

Nazwa kolumna

Typ danych

Description

Identyfikator

bigint

Jest to unikatowy identyfikator węzła dokumentu.

Element główny ma identyfikator wartość równą 0.Ujemne wartości identyfikatorów, są zastrzeżone.

parentID

bigint

Identyfikuje obiektu nadrzędnego węzła.Zidentyfikowane przez ten identyfikator obiektu nadrzędnego niekoniecznie jest element nadrzędny.Jednak zależy to NodeType węzła, w których nadrzędna jest identyfikowany przez ten identyfikator.Na przykład jeśli węzeł jest węzłem tekst, jego elementu nadrzędnego może być węzeł atrybut.

Jeśli węzeł jest w najwyższego poziom w dokumencie XML jego ParentID jest NULL.

Typ węzła

int

Identyfikuje typ węzła i jest to liczba całkowita, która odpowiada XML obiektu model (DOM) węzła typu numeracja.

Poniżej przedstawiono wartości, które mogą być wyświetlane w tej kolumnie, aby wskazać typ węzła:

1 = węzeł Element

2 = węzeł Attribute

3 = węzeł Text

4 = Węzeł sekcja CDATA

5 = Węzeł odwołania encji

6 = węzeł Entity

7 = Węzeł instrukcji przetwarzania

8 = węzeł Comment

9 = $ Węzeł dokumentu

10 = węzeł Document Type

11 = węzeł Document Fragment

12 = węzeł Notation

Aby uzyskać więcej informacji zobacz temat "nodeType właściwość" w Microsoft XML (MSXML) SDK.

LocalName

nvarchar(max)

Nadaje nazwę lokalną elementu lub atrybut.Jest NULL, jeśli obiekt modelu DOM nie ma nazwy.

Prefiks

nvarchar(max)

Jest prefiksem obszaru nazw nazwy węzła.

namespaceURI

nvarchar(max)

Czy obszaru nazw URI węzła.Jeśli wartość jest NULL, nazw nie jest obecny.

Typ danych

nvarchar(max)

Jest to typ danych rzeczywistych wiersza element lub atrybut i ma wartość NULL w inny sposób.Typ danych to wywnioskować z wbudowanej DTD lub z wbudowanego schematu.

poprzedni

bigint

Jest to identyfikator XML poprzedniego elementu tego samego poziomu.Jest NULL, jeśli nie bezpośredniego poprzedni element równorzędny.

tekst

ntext

Zawiera wartość atrybut lub zawartości elementu w postaci tekstu.Lub jest NULL, jeśli wpis tabela krawędzi nie wymaga wartości.

Za pomocą WITH klauzula, aby określić istniejącej tabela

Za pomocą klauzula WITH można określić nazwę istniejącej tabela.W tym celu należy określić istniejącej nazwy tabela, w których schematu mogą być używane przez OPENXML wygenerować zestawu zestaw wierszy.

Za pomocą WITH klauzula, aby określić schemat

Klauzula WITH służy do określania kompletnego schematu bazy danych.Określając schematu zestawu zestaw wierszy, można określić kolumna nazwy, ich typy danych i ich mapowanie do dokumentu XML.

Wzór kolumn można określić przy użyciu parametru ColPattern w SchemaDeclaration.Wzorzec określona kolumna jest używany do mapowania węzeł XML, który jest identyfikowany przez rowpattern i jest także używany do określenia typu mapowanie kolumn zestawu zestaw wierszy.

Jeżeli nie określono ColPattern dla kolumny, kolumna zestawu zestaw wierszy mapuje do węzła XML o tej samej nazwie, oparte na określonym przez mapowanie flags parametr. Jednak jeśli ColPattern jest określony jako część specyfikacji schematu w klauzula WITH, to zastąpi mapowania, która jest określona w flags parametr.

Mapowanie między kolumnami zestawu zestaw wierszy a węzłami XML

W instrukcja OPENXML można opcjonalnie określić typ map, takich jak zorientowane na atrybut lub element zorientowany, między kolumnami zestawu zestaw wierszy i węzłów XML, które są identyfikowane za pomocą rowpattern.Te informacje są używane w transformacja między węzłami XML i kolumn zestawu zestaw wierszy.

Można określić mapowanie na dwa sposoby, a ponadto można określić zarówno:

  • Za pomocą flagi Parametr

    Mapowania, jest określona przez flagi parametr zakłada korespondencji nazwy, w którym węzłów XML mapować do odpowiednich kolumn zestawu zestaw wierszy z tej samej nazwie.

  • Za pomocą ColPattern Parametr

    ColPatternokreślony jako część , wyrażenie XPathSchemaDeclaration w klauzula WITH.Mapowanie, określone w ColPattern mapowanie, określony przez są zastępowaneflagi parametr.

    ColPattern może służyć do określania typu map, takich jak zorientowane na atrybut lub element zorientowany, która zastępuje lub zwiększa domyślnego odwzorowania oznaczone flagi.

    ColPattern jest określony w następujących okolicznościach:

    • Nazwa kolumna w zestawie zestaw wierszy jest różna od nazwy elementu lub atrybut, na który jest mapowany.W takim przypadek ColPattern jest używany do identyfikowania nazwy elementów i atrybut XML do którego mapowany kolumna zestawu zestaw wierszy.

    • Chcesz mapować atrybut metaproperty do kolumna.W takim przypadek ColPattern jest używany do identyfikowania metaproperty, do którego mapowany kolumna zestawu zestaw wierszy.Aby uzyskać więcej informacji na temat używania metaproperties zobacz Określanie Metaproperties w OPENXML.

Oba flagi and ColPattern parametry są opcjonalne.Jeśli nie zostanie określony, przyjmowana jest zorientowane na atrybut mapowania.Wartością domyślną jest zorientowane na atrybut mapowanie flagi parametr.

Zorientowany atrybut mapowania.

Ustawianie flagi Określa, parametr OPENXML 1 (XML_ATTRIBUTES)zorientowany atrybut mapowania.Jeśli flagi zawiera ATTRIBUTES XML_, narażonych zestaw wierszy zawiera lub zużywa wiersze, gdzie każdy element XML jest przedstawiany jako wiersz.Atrybuty XML są mapowane do atrybutów, które zostały zdefiniowane w SchemaDeclaration lub są dostarczane przez Nazwa_tabeli klauzula WITH oparte na nazwę korespondencji.Zgodność nazwy oznacza, że atrybuty XML o określonej nazwie są przechowywane kolumna w zestawie zestaw wierszy o takiej samej nazwie.

Jeśli nazwa kolumna różni się od nazwy atrybut, które go odwzorowuje, ColPattern musi być określona.

Atrybut XML ma kwalifikator obszaru nazw, nazw kolumn w zestawie zestaw wierszy musi także mieć kwalifikator.

Mapowanie zorientowane na element

Ustawianie flagi Określa, parametr OPENXML 2 (XML_ELEMENTS)zorientowany na element mapowania.Jest on podobny do zorientowany atrybut mapowania, z wyjątkiem następujące różnice:

  • Zgodność nazwy przykład mapowania, mapowanie kolumn do elementu XML o tej samej nazwie wybiera noncomplex podelementy, chyba że określono wzorzec poziomie kolumna.Podczas procesu pobierania Jeśli podelement jest złożony, ponieważ zawiera on dodatkowe podelementy kolumna jest ustawiona na wartość NULL.Wartości atrybut z podelementy to są ignorowane.

  • Dla wielu podelementy, które mają taką samą nazwę zwracana jest pierwszy węzeł.