Megosztás a következőn keresztül:


XML(SQL Server) ESETÉN

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 FOR XML a , INSERTés UPDATE az DELETEutasítások használhatók. 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 heurisztikus heurisztika használatával hozza létre a beágyazást az eredményként kapott XML-ben az SELECT utasítás megadása alapján. 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 módnak az a feladata EXPLICIT , hogy egyszerre kombinálja az attribútumokat és az elemeket, burkolókat és beágyazott összetett tulajdonságokat hozzon létre, szóközzel elválasztott értékeket hozzon létre (például az OrderID attribútumban szerepelhet a rendelésazonosító értékeinek listája) és a vegyes tartalom.

A módú lekérdezések írása EXPLICIT azonban nehézkes lehet. A hierarchia létrehozása helyett FOR XML használhat néhány új FOR XML RAW képességet, például beágyazott AUTOvagy PATHTYPE módú lekérdezések írását és az EXPLICIT 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ókért lásd: Beágyazott XML-lekérdezések és TÍPUSirányelvet használata AZ 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ésre, amelyet záradékkal FOR BROWSE használnak.

Példák

Az alábbi SELECT utasítás az adatbázis és Sales.Customer a Sales.SalesOrderHeaderAdventureWorks2025 táblák adatait kéri le. 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"/>