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.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
SQL-Datenbank in Microsoft Fabric
Der XML-Datentyp und die TYPE Direktive in FOR XML-Abfragen ermöglichen es, den von den FOR XML-Abfragen zurückgegebenen XML-Code sowohl auf dem Server als auch auf dem Client zu verarbeiten.
Verarbeiten mit xml-Typvariablen
Sie können das Ergebnis einer FOR XML-Abfrage einer xml -Typvariablen zuweisen oder das Ergebnis mithilfe einer XQuery-Abfrage abfragen und das daraus entstehende Ergebnis einer xml -Typvariablen zur weiteren 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 zusätzlich verarbeiten, indem Sie eine der xml -Datentypmethoden verwenden. So können Sie z. B. den Attributwert von ProductModelID mithilfe der value()-Methodeabrufen.
DECLARE @i int;
SET @i = (SELECT @x.value('/row[1]/@ProductModelID[1]', 'int'));
SELECT @i;
Im folgenden Beispiel wird das Ergebnis der FOR XML -Abfrage als xml -Typ zurückgegeben, da in der TYPE -Klausel die FOR XML -Direktive angegeben wurde.
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 dem xml -Typ entspricht, können Sie eine der xml -Datentypmethoden direkt für diesen XML-Code angeben, wie es in der folgenden Abfrage gezeigt wird. In der Abfrage wird die query()-Methode (xml-Datentyp) verwendet, um das erste untergeordnete <row>-Element des Elements <myRoot> 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" />
Rückgabe von Ergebnissen innerer FOR XML-Abfragen an äußere 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. Zum 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 XML-Abfrage generierte XML-Code wird dem von der äußerenFOR XML-Abfrage generierten XML-Code hinzugefügt.Die innere Abfrage gibt die
TYPE-Direktive an. Die von der inneren Abfrage zurückgegebenen XML-Daten gehören daher dem xml -Typ an. Wenn die TYPE Direktive nicht angegeben ist, wird das Ergebnis der innerenFOR XMLAbfrage als nvarchar(max) zurückgegeben, und die XML-Daten werden entitisiert.
Steuern der Form der resultierenden XML-Daten
Geschachtelte FOR XML-Abfragen ermöglichen eine bessere Steuerung der Form der resultierenden XML-Daten. Sie können jedoch mit geschachtelten FOR XML-Abfragen XML-Code erstellen, der zum Teil attributzentriert und zum Teil elementzentriert ist.
Weitere Informationen zum Angeben von attributzentriertem und elementzentriertem XML mit geschachtelten FOR XML-Abfragen finden Sie unter FOR XML-Abfrage im Vergleich zu geschachtelter FOR XML-Abfrage und XML mit geschachtelten FOR XML-Abfragen formen.
Sie können XML-Hierarchien generieren, die Geschwisterelemente enthalten, indem Sie geschachtelte FOR XML-Abfragen im AUTO-Modus angeben. Weitere Informationen finden Sie unter Geschwisterelemente mit einer geschachtelten AUTO-Modus-Abfrage generieren.
Unabhängig davon, welchen Modus Sie verwenden, bieten geschachtelte FOR XML-Abfragen größere Steuerungsmöglichkeiten beim Beschreiben der Form des resultierenden XML-Codes. Diese Abfragen können anstelle von Abfragen im EXPLICIT-Modus verwendet werden.
Beispiele
Die folgenden Themen enthalten Beispiele für geschachtelte FOR XML-Abfragen.
FOR XML-Abfragen im Vergleich zu geschachtelten FOR XML-Abfragen
Vergleicht eine einstufige FOR XML-Abfrage mit einer geschachtelten FOR XML-Abfrage. In diesem Beispiel wird unter Anderem veranschaulicht, wie sowohl attributzentriertes als auch elementzentriertes XML als Abfrageergebnis angegeben wird.Gleichgeordnete Elemente mit einer geschachtelten Abfrage im AUTO-Modus generieren
Zeigt, wie Geschwisterelemente mithilfe einer geschachtelten AUTO-Modus-Abfrage generiert werden.Verwenden geschachtelter FOR XML-Abfragen in ASP.NET
Veranschaulicht, wie eine ASPX-Anwendung FOR XML verwenden kann, um XML von SQL Server zurückzugeben.XML mit geschachtelten FOR XML-Abfragen strukturieren
Zeigt, wie mit geschachtelten FOR XML-Abfragen die Struktur eines von SQL Server erstellten XML-Dokuments gesteuert werden kann.