Použití vnořených dotazů FOR XML
platí pro:SQL Server
Azure SQL Database
azure SQL Managed Instance
Datový typ xml a direktiva TYPE v dotazech FOR XML umožňují, aby bylo XML vrácené dotazy FOR XML zpracováno jak na serveru, tak na klientovi.
Zpracování s proměnnými typu XML
Výsledek dotazu FOR XML můžete přiřadit proměnné typu xml nebo použít XQuery k dotazování výsledku a tento výsledek přiřadit xml proměnné typu pro další zpracování.
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" />
Kód XML vrácený v proměnné @x
můžete dále zpracovat pomocí jedné z metod typu dat xml. Můžete například načíst hodnotu atributu ProductModelID
pomocí metody value().
DECLARE @i int;
SET @i = (SELECT @x.value('/row[1]/@ProductModelID[1]', 'int'));
SELECT @i;
V následujícím příkladu se výsledek dotazu FOR XML
vrátí jako typ xml, protože direktiva TYPE
je zadána v klauzuli FOR XML
.
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot');
Toto je výsledek:
<myRoot>
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
<row ProductModelID="119" Name="Bike Wash" />
</myRoot>
Vzhledem k tomu, že výsledkem je xml typ, můžete zadat jednu z metod xml datového typu přímo proti tomuto XML, jak je znázorněno v následujícím dotazu. V dotazu se metoda query() (xml Data Type) používá k načtení prvního podřízeného prvku <row>
elementu <myRoot>
.
SELECT (SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot')).query('/myRoot[1]/row[1]');
Toto je výsledek:
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
Vrácení vnitřních výsledků dotazu FOR XML do vnějších dotazů jako instance typu xml
Můžete napsat vnořené FOR XML
dotazy, ve kterých se výsledek vnitřního dotazu vrátí jako xml typ do vnějšího dotazu. Například:
SELECT Col1,
Col2,
( SELECT Col3, Col4
FROM T2
WHERE T2.Col = T1.Col
...
FOR XML AUTO, TYPE )
FROM T1
WHERE ...
FOR XML AUTO, TYPE;
Všimněte si následujících věcí z předchozího dotazu:
XML, který vygeneroval vnitřní dotaz
FOR XML
, je přidán k XML vygenerovanému vnějším dotazemFOR XML
.Vnitřní dotaz určuje direktivu
TYPE
. Proto data XML vrácená vnitřním dotazem jsou xml typu. Pokud není zadána direktiva TYPE, vrátí se výsledek vnitřního dotazuFOR XML
jako nvarchar(max) a data XML jsou entitována.
Řízení tvaru výsledných dat XML
Vnořené dotazy FOR XML poskytují větší kontrolu nad definováním tvaru výsledných dat XML. Vnořené dotazy FOR XML můžete použít k vytvoření XML, který je částečně orientovaný na atribut a částečně orientovaný na elementy.
Další informace o zadávání XML orientovaných na atributy i elementy s vnořenými dotazy FOR XML naleznete v tématu Porovnání dotazu FOR XML s vnořeným dotazem FOR XML a Formování XML pomocí vnořených dotazů FOR XML.
Hierarchie XML, které zahrnují elementy na stejné úrovni, můžete vygenerovat zadáním vnořeného automatického režimu pro dotazy XML. Další informace najdete v tématu Vytváření sourozenců s vnořeným dotazem v režimu AUTO.
Bez ohledu na režim, který použijete, poskytují vnořené dotazy FOR XML větší kontrolu nad popisem tvaru výsledného XML. Dají se použít místo dotazů explicitního režimu.
Příklady
Následující témata obsahují příklady vnořených dotazů FOR XML.
dotaz FOR XML ve srovnání s vnořeným dotazem FOR XML
Porovná jednoúrovňový dotaz FOR XML s vnořeným dotazem FOR XML. Tento příklad obsahuje ukázku, jak jako výsledek dotazu určit xml orientovaný na atribut i elementy.Generování sourozenců s vnořeným dotazem v automatickém režimu
Ukazuje, jak generovat sourozence pomocí vnořeného dotazu v režimu AUTO.použití vnořených dotazů FOR XML v ASP.NET
Demonstruje, jak může aplikace ASPX použít FOR XML k vrácení XML z SQL Serveru.Obrazce XML s vnořenými dotazy FOR XML
Ukazuje, jak pomocí vnořených dotazů FOR XML řídit strukturu dokumentu XML vytvořeného SQL Serverem.