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


Példa: Adja meg az ID és az IDREFS irányelveket

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

Az elem attribútum megadható ID típusú attribútumként, és az IDREFS attribútummal hivatkozhat rá. Ez lehetővé teszi a dokumentumon belüli csatolásokat, és hasonló a relációs adatbázisok elsődleges kulcs- és idegenkulcs-kapcsolataihoz.

Ez a példa bemutatja, hogyan használhatók az id - és IDREFS-irányelvekaz ID és IDREFS típusú attribútumok létrehozására. Mivel az azonosítók nem lehetnek egész számok, a példában szereplő azonosítóértékek konvertálódnak. Más szóval, típusra alakítva vannak. Az azonosító értékekhez előtagok használhatók.

Tegyük fel, hogy xml-t szeretne létrehozni az alábbiak szerint:

<Customer CustomerID="C1" SalesOrderIDList=" O11 O22 O33..." >
    <SalesOrder SalesOrderID="O11" OrderDate="..." />
    <SalesOrder SalesOrderID="O22" OrderDate="..." />
    <SalesOrder SalesOrderID="O33" OrderDate="..." />
    ...
</Customer>

Az SalesOrderIDList elem attribútuma <Customer> egy többértékű attribútum, amely az SalesOrderID elem attribútumára <SalesOrder> hivatkozik. A hivatkozás létrehozásához az SalesOrderID attribútumot típusként ID kell deklarálni, és az SalesOrderIDList<Customer> elem attribútumát típusként IDREFS kell deklarálni. Mivel egy ügyfél több megrendelést is kérhet, a rendszer ezt a IDREFS típust használja.

Az IDREFS típusú elemek több értékkel is rendelkeznek. Ezért egy külön kiválasztási záradékot kell használnia, amely ugyanazokat a címke-, szülő- és kulcsoszlop-információkat fogja újra felhasználni. Ezután ORDER BY gondoskodnia kell arról, hogy az IDREFS-értékeket alkotó sorok sorozata csoportosítva jelenjen meg a szülőelem alatt.

Ez a lekérdezés állítja elő a kívánt XML-fájlt. A lekérdezés a ID és IDREFS direktívák használatával írja felül a típusokat az oszlopnevekben (SalesOrder!2!SalesOrderID!ID, Customer!1!SalesOrderIDList!IDREFS).

USE AdventureWorks2022;
GO
SELECT  1 as Tag,
        0 as Parent,
        C.CustomerID   [Customer!1!CustomerID],
        NULL           [Customer!1!SalesOrderIDList!IDREFS],
        NULL           [SalesOrder!2!SalesOrderID!ID],
        NULL           [SalesOrder!2!OrderDate]
FROM   Sales.Customer C

UNION ALL
SELECT  1 as Tag,
        0 as Parent,
        C.CustomerID,
        'O-'+CAST(SalesOrderID as varchar(10)),
        NULL,
        NULL
FROM   Sales.Customer AS C
INNER JOIN Sales.SalesOrderHeader AS SOH
    ON  C.CustomerID = SOH.CustomerID

UNION ALL
SELECT 2 as Tag,
       1 as Parent,
        C.CustomerID,
        NULL,
        'O-'+CAST(SalesOrderID as varchar(10)),
        OrderDate
FROM   Sales.Customer AS C
INNER JOIN Sales.SalesOrderHeader AS SOH
    ON  C.CustomerID = SOH.CustomerID
ORDER BY [Customer!1!CustomerID] ,
         [SalesOrder!2!SalesOrderID!ID],
         [Customer!1!SalesOrderIDList!IDREFS]
FOR XML EXPLICIT;

Lásd még