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, dass der von FOR XML-Abfragen zurückgegebene XML-Code sowohl auf dem Server als auch auf dem Client verarbeitet werden kann.
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" />
Zurückgeben von Ergebnissen innerer FOR XML-Abfragen als xml-Typinstanzen an äußere Abfragen
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 wird, wird als Ergebnis der innerenFOR XML-Abfrage nvarchar(max) zurückgegeben, und die XML-Daten werden in Entitäten geändert.
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 über das Angeben von attributzentrierter und elementzentrierter XML mit geschachtelten FOR XML-Abfragen finden Sie unter FOR XML-Abfragen im Vergleich zu geschachtelten FOR XML-Abfragen und Gestalten von XML mit geschachtelten FOR XML-Abfragen.
Sie können XML-Hierarchien generieren, die gleichgeordnete Elemente enthalten, indem Sie geschachtelte FOR XML-Abfragen im AUTO-Modus angeben. Weitere Informationen finden Sie unter Generieren von gleichgeordneten Elementen mit einer geschachtelten AUTO-Modusabfrage.
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
In diesem Thema wird eine einstufige FOR XML-Abfrage mit einer geschachtelten FOR XML-Abfrage verglichen. In diesem Beispiel wird unter Anderem veranschaulicht, wie sowohl attributzentriertes als auch elementzentriertes XML als Abfrageergebnis angegeben wird.Generieren von gleichgeordneten Elementen mit einer geschachtelten AUTO-Modusabfrage
Zeigt, wie gleichgeordnete Elemente durch Verwenden einer geschachtelten Abfrage im AUTO-Modus 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.Gestalten von XML mit geschachtelten FOR XML-Abfragen
Zeigt, wie mit geschachtelten FOR XML-Abfragen die Struktur eines von SQL Server erstellten XML-Dokuments gesteuert werden kann.