Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der xml Datentyp und die TYPE-Direktive in FOR XML-Abfragen ermöglichen, dass der von den FOR XML-Abfragen zurückgegebene XML-Code sowohl auf dem Server als auch auf dem Client verarbeitet werden kann.
Verarbeitung mit XML-Typvariablen
Sie können das FOR XML-Abfrageergebnis einer xml Typvariable zuweisen oder XQuery zum Abfragen des Ergebnisses verwenden und dieses Ergebnis einer Typvariable für eine xml weitere Verarbeitung zuweisen.
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" />
Sie können den in der Variablen @xzurückgegebenen XML-Code auch mithilfe einer der xml Datentypmethoden verarbeiten. Beispielsweise können Sie den Attributwert mithilfe der ProductModelIDValue()-Methode abrufen.
DECLARE @i int;
SET @i = (SELECT @x.value('/row[1]/@ProductModelID[1]', 'int'));
SELECT @i;
Im folgenden Beispiel wird das FOR XML Abfrageergebnis als xml Typ zurückgegeben, da die TYPE Direktive in der FOR XML Klausel angegeben ist.
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot');
Dies ist das Ergebnis:
<myRoot>
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
<row ProductModelID="119" Name="Bike Wash" />
</myRoot>
Da das Ergebnis vom xml Typ ist, können Sie eine der xml Datentypmethoden direkt für diesen XML-Code angeben, wie in der folgenden Abfrage dargestellt. In der Abfrage wird die Query()-Methode (xml-Datentyp) verwendet, um das erste <row> untergeordnete Element des <myRoot> Elements abzurufen.
SELECT (SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot')).query('/myRoot[1]/row[1]');
Dies ist das Ergebnis:
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
Zurückgeben von internen FOR XML-Abfrageergebnissen an externe Abfragen als XML-Typinstanzen
Sie können geschachtelte FOR XML Abfragen schreiben, bei denen das Ergebnis der inneren Abfrage als xml Typ an die äußere Abfrage zurückgegeben wird. Beispiel:
SELECT Col1,
Col2,
( SELECT Col3, Col4
FROM T2
WHERE T2.Col = T1.Col
...
FOR XML AUTO, TYPE )
FROM T1
WHERE ...
FOR XML AUTO, TYPE;
Beachten Sie hinsichtlich der vorherigen Abfrage Folgendes:
Der von der inneren
FOR XMLAbfrage generierte XML-Code wird dem xml-Code hinzugefügt, der vom äußerenFOR XMLObjekt generiert wird.Die innere Abfrage gibt die
TYPEDirektive an. Daher sind die von der inneren Abfrage zurückgegebenen XML-Daten vomxml-Typ. Wenn die TYPE-Direktive nicht angegeben ist, wird das Ergebnis der innerenFOR XMLAbfrage alsnvarchar(max)zurückgegeben, und die XML-Daten werden entitisiert.
Steuern des Shapes der resultierenden XML-Daten
Geschachtelte FOR XML-Abfragen bieten Ihnen mehr Kontrolle beim Definieren der Form der resultierenden XML-Daten. Sie können geschachtelte FOR XML-Abfragen verwenden, um XML zu konstruieren, das teilweise attributorientiert und teilweise elementzentriert ist.
Weitere Informationen zur Spezifikation von attributorientiertem und elementzentriertem XML mit verschachtelten FOR XML-Abfragen finden Sie unter FOR XML Query Compared to Nested FOR XML Query und Shape XML with Nested FOR XML Queries.
Sie können XML-Hierarchien erstellen, die gleichgeordnete Elemente enthalten, indem Sie den geschachtelten AUTO-Modus für XML-Abfragen angeben. Weitere Informationen finden Sie unter Generieren von gleichgeordneten Elementen mit einer geschachtelten AUTO-Modus-Abfrage.
Unabhängig davon, welchen Modus Sie verwenden, bieten geschachtelte FOR XML-Abfragen mehr Kontrolle beim Beschreiben der Form des resultierenden XML. Sie können anstelle von EXPLICIT-Modus-Abfragen verwendet werden.
Beispiele
Die folgenden Themen enthalten Beispiele für geschachtelte FOR XML-Abfragen.
FOR XML-Abfrage im Vergleich zu geschachtelter FOR XML-Abfrage
Vergleicht eine einstufige FOR XML-Abfrage mit einer geschachtelten FOR XML-Abfrage. Dieses Beispiel enthält eine Demonstration, wie sowohl attributorientiertes als auch elementorientiertes XML als Ergebnis der Abfrage angegeben wird.
Generieren von Geschwistern mit einer geschachtelten AUTO Mode-Abfrage
Zeigt, wie Geschwister mithilfe einer geschachtelten AUTO-Modus-Abfrage generiert werden.
Verwenden von geschachtelten FOR XML-Abfragen in ASP.NET
Veranschaulicht, wie eine ASPX-Anwendung FOR XML verwenden kann, um XML von SQL Server zurückzugeben.
Shape-XML mit geschachtelten FOR XML-Abfragen
Zeigt, wie geschachtelte FOR XML-Abfragen verwendet werden, um die Struktur eines von SQL Server erstellten XML-Dokuments zu steuern.