Delen via


Voorbeeld: Geef de id- en IDREFS-instructies op

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Een elementkenmerk kan worden opgegeven als een id-typekenmerk en het KENMERK IDREFS kan vervolgens worden gebruikt om ernaar te verwijzen. Dit maakt koppelingen tussen documenten mogelijk en is vergelijkbaar met de primaire sleutel- en refererende-sleutelrelaties in relationele databases.

In dit voorbeeld ziet u hoe de id - en IDREFS-instructies kunnen worden gebruikt om kenmerken van id - en IDREFS-typen te maken. Omdat id's geen geheel getalwaarden kunnen zijn, worden de id-waarden in dit voorbeeld geconverteerd. Met andere woorden, ze worden getypecast. Voorvoegsels worden gebruikt voor de id-waarden.

Stel dat u XML wilt maken zoals wordt weergegeven in het volgende:

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

Het SalesOrderIDList kenmerk van het <Customer> element is een kenmerk met meerdere waarden dat verwijst naar het SalesOrderID kenmerk van het <SalesOrder> element. Om deze koppeling tot stand te brengen, moet het kenmerk van SalesOrderID het ID type worden gedeclareerd en moet het SalesOrderIDList kenmerk van het element van <Customer> het IDREFS type worden gedeclareerd. Omdat een klant verschillende bestellingen kan aanvragen, wordt het IDREFS type gebruikt.

Elementen van het type IDREFS hebben ook meer dan één waarde. Daarom moet je een afzonderlijke select-clausule gebruiken waarmee dezelfde tag-, bovenliggende en sleutelkolomgegevens opnieuw worden gebruikt. Zorg ervoor dat ORDER BY de reeks rijen die de IDREFS-waarden vormen, gegroepeerd onder het bovenliggende element wordt weergegeven.

Dit is de query die de gewenste XML produceert. De query gebruikt de ID en IDREFS instructies om de typen in de kolomnamen (SalesOrder!2!SalesOrderID!ID, Customer!1!SalesOrderIDList!IDREFS) te overschrijven.

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;

Zie ook