Udostępnij za pośrednictwem


Zagnieżdżony kwerendy XML

W SQL Server 2000, można określić klauzula XML dla tylko u góry poziom kwerendy WYBIERAJĄCEJ.Wynikowy XML zwracana jest przede wszystkim do klient w celu dodatkowego przetwarzania.Począwszy od SQL Server 2005, jednak xml Typ danych oraz typu dyrektywy w kwerendach XML dla włączyć XML zwracane przez kwerendy XML dla ponadto być przetworzone na serwerze.

Przetwarzanie XML zmiennych typu

Można przypisać XML dla wyniku kwerendy do xml wpisz zmienną, lub wynik kwerendy za pomocą XQuery i przypisać wyniku, aby xml Typ zmiennej dla przetwarzania więcej.

USE AdventureWorks2008R2;
GO
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 przetworzyć XML zwróconych w zmiennej, @x, używając jednej z xml Typ danych metod.Na przykład, można pobrać ProductModelID wartość atrybut za pomocą value() metoda.

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 typu, ponieważ TYPE dyrektywy 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');

Jest to wynikiem:

<myRoot>

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

<row ProductModelID="119" Name="Bike Wash" />

</myRoot>

Ponieważ wynik jest xml typu, można określić jeden z xml metody bezpośrednio przeciwko tym XML, typ danych, jak pokazano w następującej kwerendy.W kwerendzie query() metoda (xml typ danych) jest używana do pobierania pierwszej <row> element podrzędność <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]');

Jest to wynikiem:

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

Zwracanie wewnętrzne dla XML wyników kwerendy do zewnętrznych kwerend jako xml typu wystąpienia

Można napisać zagnieżdżonych FOR XML kwerendy, której wynikiem kwerendy wewnętrzne są zwracane jako xml typu zewnętrznej kwerendy.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;

Poniższe z poprzedniej kwerendy:

  • XML wygenerowany przez wewnętrzne FOR XML kwerenda jest dodawany do XML generowane przez zewnętrzne FOR XML.

  • Określa wewnętrzną kwerendą TYPE dyrektywy.Dlatego dane XML zwrócone przez wewnętrzną kwerendą jest xml typu.Jeżeli nie określono typu dyrektywy, wynik wewnętrzne FOR XML kwerendy są zwracane jako nvarchar(max) i entitized danych XML.

Kontrolowanie kształt wynikowy danych XML

Kwerend zagnieżdżonych dla XML dają większą kontrolę, definiując kształt wynikowy danych XML.W SQL Server 2000, kwerendy trybu surowców i automatyczne generowanie zorientowany atrybut XML domyślnieNa przykład:

USE AdventureWorks2008R2;
GO
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" />

Można również pobrać wszystkie XML jako element wyśrodkowany na określając ELEMENTS dyrektywy.Na przykład:

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

Jest to wynikiem zorientowany 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ć zorientowany atrybut lub wyśrodkowany na element XML w wyniku kwerendy.Począwszy od SQL Server 2005, jednak można używać kwerend zagnieżdżonych XML dla do konstruowania 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 XML dla Zobacz W porównaniu z zagnieżdżonych kwerendy XML dla kwerendy XML i Kształtowanie XML z kwerend zagnieżdżonych XML dla.

W SQL Server 2000, można utworzyć elementy równorzędne tylko przez pisania kwerend przy użyciu trybu JAWNE.Jednakże może to być kłopotliwe.Począwszy od SQL Server 2005, można generować hierarchie XML, które zawierają elementy równorzędne, określając zagnieżdżonych trybu automatycznego XML kwerendy.Aby uzyskać więcej informacji, zobacz Generowanie przy użyciu kwerendy trybu automatycznego zagnieżdżone elementy równorzędne.

Niezależnie od używanego trybu zagnieżdżone kwerendy XML dla zapewniają większą kontrolę w opisujących kształt wynikowy XML.Służą one zamiast JAWNEGO trybu kwerend.

Przykłady

Przykłady kwerend zagnieżdżonych dla XML można znaleźć w następujących tematach.