Udostępnij za pośrednictwem


Nested FOR XML Queries

W SQL Server 2000, można określić klauzulę FOR XML tylko na najwyższym poziomie kwerendy WYBIERAJĄCEJ. Wynikowy plik XML, zwracana jest przede wszystkim do klient w celu dodatkowego przetwarzania.Zaczyna się od SQL Server 2005, jednak xml Typ danych oraz Dyrektywa TYPE w kwerendach FOR XML włączyć zwracane przez kwerendy FOR XML XML mają być dodatkowo przetwarzane na serwerze.

Przetwarzanie z zmienne typu danych xml

Można przypisać kod XML dla wyniku kwerendy do XML zmiennej, należy wpisać lub wynik kwerendy za pomocą XQuery i przypisać ten wynik XML typu zmienna do przetworzenia więcej.

DECLARE @x xml
SET @x=(SELECT ProductModelID, Name
        FROM Production.ProductModel
        WHERE ProductModelID=122 or ProductModelID=119
        FOR XML RAW, TYPE)
SELECT @x
-- Result
--<row ProductModelID="122" Name="All-Purpose Bike Stand" />
--<row ProductModelID="119" Name="Bike Wash" />

Ponadto można przetwarzać XML zwrócone w zmiennej, @x, korzystając z jednej z xml metody typu danych. Na przykład, można pobrać ProductModelID wartość atrybut przy użyciu Metoda Value().

DECLARE @i int
SET @i = (SELECT @x.value('/row[1]/@ProductModelID[1]', 'int'))
SELECT @i

W poniższym przykładzie FOR XML Wynik kwerendy są zwracane jako xml Wpisz, ponieważ TYPE dyrektywa jest określona w FOR XML Klauzula.

SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot')

Oto wynik:

<myRoot>
  <row ProductModelID="122" Name="All-Purpose Bike Stand" />
  <row ProductModelID="119" Name="Bike Wash" />
</myRoot>

Ponieważ wynik jest xml Typ, można określić jeden z xml metody bezpośrednio przed tym XML, typ danych, jak pokazano w następującej kwerendzie. W kwerendzie Metoda Query() (typ danych xml) jest używany do pobierania pierwszym elementem podrzędnym elementu <row> <myRoot> elementu.

SELECT  (SELECT ProductModelID, Name
         FROM Production.ProductModel
         WHERE ProductModelID=119 or ProductModelID=122
         FOR XML RAW, TYPE,ROOT('myRoot')).query('/myRoot[1]/row[1]')

Oto wynik:

<row ProductModelID="122" Name="All-Purpose Bike Stand" />

Zwracanie wewnętrzny FOR XML kwerendy wyniki do kwerendy zewnętrzny jako xml typu wystąpienia

Można napisać zagnieżdżone FOR XML kwerendy, której wynikiem kwerendy wewnętrzne są zwracane jako xml Wpisz kwerendę zewnętrznego. Na przykład:

SELECT Col1, 
       Col2, 
       ( SELECT Col3, Col4 
        FROM  T2
        WHERE T2.Col = T1.Col
        ...
        FOR XML AUTO, TYPE )
FROM T1
WHERE ...
FOR XML AUTO, TYPE

Pierwszy przycisk jest przyciskiem domyślnym.

  • Kod XML wygenerowany przez wewnętrzne FOR XML kwerendy zostanie dodana do pliku XML wygenerowany przez zewnętrzne FOR XML.

  • Określa wewnętrzne kwerendy TYPE dyrektywa. Dlatego jest danych XML zwróconych przez kwerendę wewnętrznej XML typu.Jeżeli nie określono typu w dyrektywie, wynik wewnętrzne FOR XML kwerendy są zwracane jako nvarchar(max) i jest entitized danych XML.

Kontrolowanie kształt danych XML

Kwerendy nested FOR XML dają większą kontrolę, definiując kształt uzyskane dane XML.W SQL Server 2000, zorientowany na atrybut XML domyślnie generuje kwerendy trybu RAW i AUTO. Na przykład:

SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=122 or ProductModelID=119
FOR XML RAW
 

Jest to wynikiem zorientowany atrybut:

<row ProductModelID="122" Name="All-Purpose Bike Stand" />
<row ProductModelID="119" Name="Bike Wash" />

Alternatywnie można pobrać wszystkich XML jako zorientowany elementu przez określenie ELEMENTS dyrektywa. Na przykład:

SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=122 or ProductModelID=119
FOR XML RAW, ELEMENTS 

Jest to wynikiem zorientowane na element:

<row>
  <ProductModelID>122</ProductModelID>
  <Name>All-Purpose Bike Stand</Name>
</row>
<row>
  <ProductModelID>119</ProductModelID>
  <Name>Bike Wash</Name>
</row>

W SQL Server 2000, dlatego należy wybrać zorientowane na atrybut albo zorientowane na element XML w wyniku kwerendy. Zaczyna się od SQL Server 2005, jednak można użyć kwerend zagnieżdżonych FOR XML w celu skonstruowania XML jest częściowo atrybut zorientowany i częściowo element zorientowany.

Aby uzyskać więcej informacji na temat określania zorientowany atrybut i zorientowany na element XML z kwerend zagnieżdżonych FOR XML zobacz DLA kwerendy XML porównanie do kwerendy zagnieżdżone FOR XML i Kształtowanie XML zawierających kwerendy zagnieżdżone FOR XML.

W SQL Server 2000, tym samym poziomie można utworzyć tylko za pomocą odpowiedniego kwerendy przy użyciu trybu JAWNE. Jednakże może to być kłopotliwe.Zaczyna się od SQL Server 2005, można generować hierarchii XML, które zawierają elementy równorzędne określając zagnieżdżonych trybie AUTO FOR XML kwerendy. Aby uzyskać więcej informacji zobaczGenerowanie przy użyciu kwerendy trybie AUTO zagnieżdżone elementy równorzędne.

Niezależnie od trybu, którego używasz zagnieżdżone kwerendy FOR XML zapewniają lepszą kontrolę w opisujący kształt wynikowy plik XML.Mogą być używane zamiast JAWNEGO tryb kwerendy.

Przykłady

Poniższe tematy zawierają przykłady kwerend zagnieżdżonych FOR XML.