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
En SELECT fråga returnerar resultat som en raduppsättning. Du kan också hämta formella resultat av en SQL-fråga som XML genom att FOR XML ange -satsen i frågan.
FOR XML Satsen kan användas i frågor på toppnivå och i underfrågor. Satsen på den översta nivån FOR XML kan endast användas i -instruktionen SELECT . I underfrågor FOR XML kan användas i INSERT- och UPDATEDELETE -uttrycken.
FOR XML kan också användas i tilldelningsinstruktioner.
I en FOR XML sats anger du något av följande lägen:
RAWAUTOEXPLICITPATH
Läget RAW genererar ett enda <row> element per rad i raduppsättningen som returneras av -instruktionen SELECT . Du kan generera XML-hierarki genom att skriva kapslade FOR XML frågor.
Läget AUTO genererar kapsling i resulterande XML med hjälp av heuristik baserat på hur instruktionen SELECT anges. Du har minimal kontroll över formen på xml-koden som genereras. Kapslade FOR XML frågor kan skrivas för att generera XML-hierarki utöver DEN XML-form som genereras av AUTO läges-heuristik.
Läget EXPLICIT ger mer kontroll över XML-formen. Du kan blanda attribut och element efter bestämmer xml-formen. Det kräver ett specifikt format för den resulterande raduppsättningen som genereras på grund av frågekörning. Det här raduppsättningsformatet mappas sedan till XML-form. Kraften i EXPLICIT läget är att blanda attribut och element efter behov, skapa omslutningar och kapslade komplexa egenskaper, skapa utrymmesavgränsade värden (till exempel OrderID kan attributet ha en lista med order-ID-värden) och blandat innehåll.
Det kan dock vara besvärligt att skriva EXPLICIT frågor i läget. Du kan använda några av de nya FOR XML funktionerna, till exempel att skriva kapslade FOR XML RAW, AUTOeller PATH lägesfrågor och TYPE direktivet, i stället för att använda EXPLICIT läge för att generera hierarkierna. Kapslade FOR XML frågor kan skapa valfri XML som du kan generera med hjälp EXPLICIT av läget. Mer information finns i Använda kapslade FOR XML-frågor och TYPE-direktiv i FOR XML-frågor.
Läget PATH tillsammans med den kapslade FOR XML frågefunktionen ger flexibiliteten EXPLICIT i läget på ett enklare sätt.
Dessa lägen gäller endast för körningen av frågan som de har angetts för. De påverkar inte resultatet av efterföljande frågor.
FOR XML är inte giltigt för val som används med en FOR BROWSE sats.
Examples
Följande SELECT instruktion hämtar information från tabellerna Sales.Customer och Sales.SalesOrderHeader i AdventureWorks2022 databasen. Den här frågan anger AUTO läget i FOR XML -satsen:
USE AdventureWorks2022;
GO
SELECT Cust.CustomerID,
OrderHeader.CustomerID,
OrderHeader.SalesOrderID,
OrderHeader.STATUS
FROM Sales.Customer Cust
INNER JOIN Sales.SalesOrderHeader OrderHeader
ON Cust.CustomerID = OrderHeader.CustomerID
FOR XML AUTO;
FOR XML-satsen och servernamnen
När en SELECT instruktion med en FOR XML sats anger ett namn i fyra delar i frågan returneras inte servernamnet i det resulterande XML-dokumentet när frågan körs på den lokala datorn. Servernamnet returneras dock som fyradelade namn när frågan körs på en nätverksserver.
Tänk till exempel på den här frågan:
SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person
FOR XML AUTO;
Lokal server: När ServerName är en lokal server returnerar frågan följande text:
<AdventureWorks2022.Person.Person LastName="Achong" />
Nätverksserver: När ServerName är en nätverksserver returnerar frågan följande text:
<ServerName.AdventureWorks2022.Person.Person LastName="Achong" />
Undvik tvetydighet: Den här potentiella tvetydigheten kan undvikas genom att ange det här aliaset:
SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person x
FOR XML AUTO;
Nu returnerar den tvetydiga frågan följande text:
<x LastName="Achong"/>