Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Az alábbi példa bemutatja, hogyan hozhat létre testvéreket beágyazott AUTO módú lekérdezéssel. Az ILYEN XML-fájlok létrehozásának egyetlen másik módja az EXPLICIT mód használata. Ez azonban nehézkes lehet.
Példa
Ez a lekérdezés olyan XML-fájlt hoz létre, amely értékesítési rendelés adatait tartalmazza. Ez a következőket foglalja magában:
Értékesítési rendelés fejlécének adatai,
SalesOrderID,SalesPersonIDésOrderDate.AdventureWorks2025ezeket az adatokat aSalesOrderHeadertáblában tárolja.Értékesítési rendelés részleteinek adatai. Ide tartozik egy vagy több megrendelt termék, az egységár és a megrendelt mennyiség. Ezeket az információkat a rendszer a
SalesOrderDetailtáblában tárolja.Értékesítési személy adatai. Ő az értékesítő, aki átvette a rendelést. A
SalesPersontábla biztosítja aSalesPersonID. Ehhez a lekérdezéshez csatlakoztatnia kell ezt a táblát aEmployeetáblához az értékesítési személy nevének megkereséséhez.
A két különböző SELECT lekérdezések, amelyek követik, létrehoznak XML-t, kis különbséggel az alakzatban.
Az első lekérdezés xml-fájlt hoz létre, amelyben <SalesPerson> és <SalesOrderHeader><SalesOrder>testvérgyermekeként jelennek meg:
SELECT
(SELECT top 2 SalesOrderID, SalesPersonID, CustomerID,
(select top 3 SalesOrderID, ProductID, OrderQty, UnitPrice
from Sales.SalesOrderDetail
WHERE SalesOrderDetail.SalesOrderID =
SalesOrderHeader.SalesOrderID
FOR XML AUTO, TYPE)
FROM Sales.SalesOrderHeader
WHERE SalesOrderHeader.SalesOrderID = SalesOrder.SalesOrderID
for xml auto, type),
(SELECT *
FROM (SELECT SalesPersonID, EmployeeID
FROM Sales.SalesPerson, HumanResources.Employee
WHERE SalesPerson.SalesPersonID = Employee.EmployeeID) As
SalesPerson
WHERE SalesPerson.SalesPersonID = SalesOrder.SalesPersonID
FOR XML AUTO, TYPE)
FROM (SELECT SalesOrderHeader.SalesOrderID, SalesOrderHeader.SalesPersonID
FROM Sales.SalesOrderHeader, Sales.SalesPerson
WHERE SalesOrderHeader.SalesPersonID = SalesPerson.SalesPersonID
) as SalesOrder
ORDER BY SalesOrder.SalesOrderID
FOR XML AUTO, TYPE;
Az előző lekérdezésben a legkülső SELECT utasítás a következőket teszi:
Lekérdezi a sorhalmazt
SalesOrder, amelyet aFROMzáradékban adtak meg. Az eredmény egy legalább egy<SalesOrder>elemet tartalmazó XML.A
AUTOmódot és aTYPEdirektívát adja meg.AUTOmód XML-vé alakítja át a lekérdezés eredményét, és aTYPEirányelv xml- típusként adja vissza az eredményt.Két beágyazott
SELECTutasítást tartalmaz vesszővel elválasztva. Az első beágyazottSELECTlekéri az értékesítési rendelés fejlécének és részleteinek adatait, a második beágyazottSELECTutasítás pedig lekéri az üzletkötő adatait.- A
SELECT,SalesOrderIDésSalesPersonIDlekérőCustomerIDutasítás tartalmaz egy másik beágyazottSELECT ... FOR XMLutasítást (AUTOmóddal ésTYPEirányelvvel), amely az értékesítési rendelés részletes adatait adja vissza.
- A
Az értékesítési személy adatait lekérő SELECT utasítás lekérdezi a SalesPerson záradékban létrehozott sorhalmazt, FROM. Ahhoz, hogy FOR XML lekérdezések működjenek, meg kell adnia a FROM záradékban létrehozott névtelen sorkészlet nevét. Ebben az esetben a megadott név SalesPerson.
Ez a részleges eredmény:
<SalesOrder>
<Sales.SalesOrderHeader SalesOrderID="43659" SalesPersonID="279" CustomerID="676">
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="776" OrderQty="1" UnitPrice="2024.9940" />
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="777" OrderQty="3" UnitPrice="2024.9940" />
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="778" OrderQty="1" UnitPrice="2024.9940" />
</Sales.SalesOrderHeader>
<SalesPerson SalesPersonID="279" EmployeeID="279" />
</SalesOrder>
...
A következő lekérdezés ugyanazokat az értékesítési rendelési adatokat hozza létre, kivéve, hogy az eredményként kapott XML-fájlban a <SalesPerson><SalesOrderDetail>testvéreként jelenik meg:
<SalesOrder>
<SalesOrderHeader ...>
<SalesOrderDetail .../>
<SalesOrderDetail .../>
...
<SalesPerson .../>
</SalesOrderHeader>
</SalesOrder>
<SalesOrder>
...
</SalesOrder>
Ez a lekérdezés:
SELECT SalesOrderID, SalesPersonID, CustomerID,
(select top 3 SalesOrderID, ProductID, OrderQty, UnitPrice
from Sales.SalesOrderDetail
WHERE SalesOrderDetail.SalesOrderID = SalesOrderHeader.SalesOrderID
FOR XML AUTO, TYPE),
(SELECT *
FROM (SELECT SalesPersonID, EmployeeID
FROM Sales.SalesPerson, HumanResources.Employee
WHERE SalesPerson.SalesPersonID = Employee.EmployeeID) As SalesPerson
WHERE SalesPerson.SalesPersonID = SalesOrderHeader.SalesPersonID
FOR XML AUTO, TYPE)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID=43659 or SalesOrderID=43660
FOR XML AUTO, TYPE;
Ez az eredmény:
<Sales.SalesOrderHeader SalesOrderID="43659" SalesPersonID="279" CustomerID="676">
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="776" OrderQty="1" UnitPrice="2024.9940" />
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="777" OrderQty="3" UnitPrice="2024.9940" />
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="778" OrderQty="1" UnitPrice="2024.9940" />
<SalesPerson SalesPersonID="279" EmployeeID="279" />
</Sales.SalesOrderHeader>
<Sales.SalesOrderHeader SalesOrderID="43660" SalesPersonID="279" CustomerID="117">
<Sales.SalesOrderDetail SalesOrderID="43660" ProductID="762" OrderQty="1" UnitPrice="419.4589" />
<Sales.SalesOrderDetail SalesOrderID="43660" ProductID="758" OrderQty="1" UnitPrice="874.7940" />
<SalesPerson SalesPersonID="279" EmployeeID="279" />
</Sales.SalesOrderHeader>
Mivel a TYPE irányelv xml típusú lekérdezési eredményt ad vissza, az eredményül kapott XML-t különböző xml adattípus-metódusok használatával kérdezheti le. További információ: xml adattípus-metódusok. A következő lekérdezésben jegyezze fel a következőket:
Az előző lekérdezés bekerül a
FROMzáradékba. A lekérdezés eredménye táblaként lesz visszaadva. Jegyezze fel a hozzáadottXmlColaliast.A
SELECTzáradék egy XQuery-t határoz meg aXmlColzáradékban visszaadottFROMellen. Az XQuery megadásához azquery()adattípus metódusa használható. További információ: query() metódus (xml adattípus).SELECT XmlCol.query('<Root> { /* } </Root>') FROM ( SELECT SalesOrderID, SalesPersonID, CustomerID, (select top 3 SalesOrderID, ProductID, OrderQty, UnitPrice from Sales.SalesOrderDetail WHERE SalesOrderDetail.SalesOrderID = SalesOrderHeader.SalesOrderID FOR XML AUTO, TYPE), (SELECT * FROM (SELECT SalesPersonID, EmployeeID FROM Sales.SalesPerson, HumanResources.Employee WHERE SalesPerson.SalesPersonID = Employee.EmployeeID) As SalesPerson WHERE SalesPerson.SalesPersonID = SalesOrderHeader.SalesPersonID FOR XML AUTO, TYPE) FROM Sales.SalesOrderHeader WHERE SalesOrderID='43659' or SalesOrderID='43660' FOR XML AUTO, TYPE ) as T(XmlCol);