Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
XML- datatyp och TYPE-direktivet i FOR XML-förfrågningar gör det möjligt att bearbeta den XML som returneras av FOR XML-förfrågningarna både på servern och klienten.
Bearbetning med xml-typvariabler
Du kan tilldela FOR XML-frågeresultatet till en XML- typvariabel eller använda XQuery för att fråga efter resultatet och tilldela resultatet till en XML- typvariabel för mer bearbetning.
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" />
Du kan dessutom bearbeta XML-koden som returneras i variabeln @xmed hjälp av någon av de xml- datatypsmetoderna. Du kan till exempel hämta attributet ProductModelID med hjälp av metoden value().
DECLARE @i int;
SET @i = (SELECT @x.value('/row[1]/@ProductModelID[1]', 'int'));
SELECT @i;
I följande exempel returneras FOR XML-frågeresultatet som en xml- typ, eftersom TYPE-direktivet anges i FOR XML-satsen.
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot');
Det här är resultatet:
<myRoot>
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
<row ProductModelID="119" Name="Bike Wash" />
</myRoot>
Eftersom resultatet är av XML- typ kan du ange någon av de xml- datatypsmetoderna direkt mot denna XML, som du ser i följande fråga. I frågan används metoden query() (xml Data Type) för att hämta det första <row> elementet som är underordnat <myRoot>-elementet.
SELECT (SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot')).query('/myRoot[1]/row[1]');
Det här är resultatet:
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
Returnera inre FOR XML-frågeresultat till yttre frågor som xml-typinstanser
Du kan skriva kapslade FOR XML frågor där resultatet av den inre frågan returneras som en XML- typ till den yttre frågan. Till exempel:
SELECT Col1,
Col2,
( SELECT Col3, Col4
FROM T2
WHERE T2.Col = T1.Col
...
FOR XML AUTO, TYPE )
FROM T1
WHERE ...
FOR XML AUTO, TYPE;
Observera följande från föregående fråga:
XML-koden som genereras av den inre
FOR XML-frågan läggs till i XML-koden som genereras av den yttreFOR XML.Den inre frågan anger
TYPE-direktivet. Därför är XML-data som returneras av den inre frågan av xml--typ. Om TYPE-direktivet inte har angetts returneras resultatet av inreFOR XMLfråga som nvarchar(max) och XML-data är entitetiserad.
Kontrollera formen på resulterande XML-data
Kapslade FOR XML-frågor ger dig mer kontroll när du definierar formen på resulterande XML-data. Du kan använda kapslade FOR XML-frågor för att konstruera XML som delvis är attributcentrerad och delvis elementcentrerad.
Mer information om hur du specificerar både attributcentrerad och elementcentrerad XML med kapslade FOR XML-frågor finns i FOR XML-fråga jämfört med kapslad FOR XML-fråga och Forma XML med kapslade FOR XML-frågor.
Du kan generera XML-hierarkier som innehåller syskon genom att ange kapslat AUTO-läge FÖR XML-frågor. Mer information finns i Generera syskon med en kapslad autolägesfråga.
Oavsett vilket läge du använder ger kapslade FOR XML-frågor mer kontroll när du beskriver formen på den resulterande XML-koden. De kan användas i stället för EXPLICIT-lägesfrågor.
Exempel
Följande avsnitt innehåller exempel på kapslade FOR XML-frågor.
FOR XML-sökfråga jämfört med kapslad FOR XML-sökfråga
Jämför en FOR XML-fråga på en nivå med en kapslad FOR XML-fråga. Det här exemplet innehåller en demonstration av hur du anger både attributcentrerad och elementcentrerad XML som resultat av frågan.Generera syskon med en kapslad autolägesfråga
Visar hur du genererar syskon med hjälp av en kapslad AUTO-lägesfrågaAnvända kapslade FOR XML-frågor i ASP.NET
Visar hur ett ASPX-program kan använda FOR XML för att returnera XML från SQL Server.Strukturera XML med kapslade FOR XML-frågor
Visar hur du använder kapslade FOR XML-frågor för att styra strukturen för ett XML-dokument som skapats av SQL Server.