FOR XML (SQL Server)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

A SELECT lekérdezés sorhalmazként adja vissza az eredményeket. Az SQL-lekérdezések formális eredményeit xml-fájlként is lekérheti a FOR XML lekérdezés záradékának megadásával. A FOR XML záradék a legfelső szintű lekérdezésekben és az al lekérdezésekben is használható. A legfelső szintű FOR XML záradék csak az SELECT utasításban használható. Az albekérdezésekben a(z) FOR XML használható a(z) INSERT, UPDATE és DELETE utasításokban. FOR XML a hozzárendelési utasításokban is használható.

FOR XML Egy záradékban az alábbi módok egyikét adja meg:

  • RAW
  • AUTO
  • EXPLICIT
  • PATH

A RAW mód soronként egyetlen <row> elemet hoz létre az utasítás által SELECT visszaadott sorhalmazban. Xml-hierarchiát beágyazott FOR XML lekérdezések írásával hozhat létre.

A AUTO mód heuristikák alapján hoz létre beágyazást az eredményül kapott XML-ben, attól függően, hogyan van megadva a SELECT utasítás. Minimálisan szabályozhatja a létrehozott XML alakját. A beágyazott FOR XML lekérdezések megírhatók úgy, hogy az XML-hierarchiát a mód heurisztika által AUTO létrehozott XML-alakzaton túl is létrehozhassa.

A EXPLICIT mód lehetővé teszi az XML alakjának további szabályozását. Az XML alakjának meghatározásához az attribútumokat és az elemeket egyszerre kombinálhatja. Egy adott formátumot igényel a lekérdezés végrehajtása miatt létrehozott eredménysorkészlethez. Ez a sorhalmaz-formátum ezután XML-alakzatra van leképezve. A EXPLICIT mód ereje abban rejlik, hogy tetszőlegesen keverheti az attribútumokat és elemeket, burkolóelemeket és összetett beágyazott tulajdonságokat hozhat létre, szóközzel elválasztott értékeket állíthat elő (például az OrderID attribútum rendelésazonosító-értékek listáját tartalmazhatja), valamint vegyes tartalmat is létrehozhat.

Azonban a EXPLICIT módban történő lekérdezésírás körülményes lehet. A hierarchiák létrehozásához az EXPLICIT mód használata helyett használhatja az új FOR XML képességek némelyikét, például beágyazott FOR XML RAW, AUTO vagy PATH módú lekérdezések írását, valamint a TYPE irányelvet. A beágyazott FOR XML lekérdezések bármilyen XML-t létrehozhatnak, amelyet a EXPLICIT mód használatával hozhat létre. További információért lásd: Beágyazott FOR XML-lekérdezések használata és TYPE irányelv használata a FOR XML-lekérdezésekben.

A PATH mód és a beágyazott FOR XML lekérdezési funkció egyszerűbbé teszi a EXPLICIT mód rugalmasságát.

Ezek a módok csak annak a lekérdezésnek a végrehajtására vannak érvényben, amelyhez be vannak állítva. Ezek nem befolyásolják a későbbi lekérdezések eredményeit.

FOR XML nem érvényes olyan kijelölés esetén, amelyet FOR BROWSE záradékkal használnak.

Példák

Az alábbi SELECT utasítás a AdventureWorks2025 adatbázis Sales.Customer és Sales.SalesOrderHeader tábláiból kér le információkat. Ez a lekérdezés a AUTO záradékban szereplő FOR XML módot adja meg:

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;

A FOR XML záradék és a kiszolgálónevek

Ha egy SELECTFOR XML záradékkal ellátott utasítás négyrészes nevet ad meg a lekérdezésben, a kiszolgáló neve nem jelenik meg az eredményül kapott XML-dokumentumban, amikor a lekérdezést a helyi számítógépen hajtják végre. A kiszolgáló neve azonban négyrészes névként lesz visszaadva, amikor a lekérdezést egy hálózati kiszolgálón hajtják végre.

Vegyük például ezt a lekérdezést:

SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person
FOR XML AUTO;

Helyi kiszolgáló: Helyi kiszolgáló esetén ServerName a lekérdezés a következő szöveget adja vissza:

<AdventureWorks2022.Person.Person LastName="Achong" />

Hálózati kiszolgáló: Hálózati kiszolgáló esetén ServerName a lekérdezés a következő szöveget adja vissza:

<ServerName.AdventureWorks2022.Person.Person LastName="Achong" />

A kétértelműség elkerülése: Ez a lehetséges kétértelműség elkerülhető az alias megadásával:

SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person x
FOR XML AUTO;

Most a egyértelmű lekérdezés a következő szöveget adja vissza:

<x LastName="Achong"/>