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.
DLA kwerendy XML porównanie do kwerendy zagnieżdżone FOR XML
Porównanie kwerendy XML poziom zagnieżdżonych kwerendę FOR XML.W tym przykładzie obejmuje Pokaz sposobu określania zorientowany atrybut i zorientowany na element XML w wyniku kwerendy.Generowanie przy użyciu kwerendy trybie AUTO zagnieżdżone elementy równorzędne
Pokazuje, jak wygenerować przy użyciu kwerendy zagnieżdżone trybie AUTO elementy równorzędneZa pomocą kwerendy zagnieżdżone FOR XML w programie ASP.NET
Demonstruje możliwości wykorzystania przez aplikację ASPX FOR XML do zwracania XML z SQL Server.Kształtowanie XML zawierających kwerendy zagnieżdżone FOR XML
Pokazuje, jak użyć kwerend zagnieżdżonych FOR XML do kontrolowania strukturę dokumentu XML utworzony przez SQL Server.