Udostępnij za pośrednictwem


Example: Specifying the ID and IDREFS Directives

Atrybut elementu może być określony jako IDENTYFIKATOR Atrybut typu a IDREFS atrybut może być następnie używany do odwoływania się do niego. To umożliwia łącza wewnątrz dokumentu i jest podobna do klucz podstawowy i relacji kluczy obcych w relacyjnych bazach danych.

Ten przykład ilustruje sposób IDENTYFIKATOR and IDREFS dyrektyw może służyć do tworzenia atrybutów IDENTYFIKATOR and IDREFS typów.Identyfikatory nie mogą być wartości całkowite, wartości identyfikatorów, w tym przykładzie są konwertowane.Innymi słowy są one rzutować typu.Prefiksy są używane dla wartości identyfikatorów.

Załóżmy, że chcesz utworzyć XML, jak pokazano w poniższym:

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

The SalesOrderIDList attribute of the < Customer > element is a multivalued attribute that refers to the SalesOrderID attribute of the < SalesOrder > element.To establish this link, the SalesOrderID attribute must be declared of ID type, and the SalesOrderIDList attribute of the < Customer> element must be declared of IDREFS type.Ponieważ klient może żądać kilku zamówień IDREFS typ jest używany.

Elementy IDREFS typ również mieć więcej niż jedną wartość.Dlatego należy użyć klauzula select oddzielne wykorzystywane ponownie ten sam tag obiektu nadrzędnego i informacji o kolumnie klucz.ORDER BY ma przycisk upewnić się, że kolejność wierszy, które tworzą IDREFS wartości pojawi się zgrupowane razem w ich elementu nadrzędnego.

To jest kwerenda, która generuje plik XML, który ma.W kwerendzie użyto IDENTYFIKATOR and IDREFS dyrektyw na zastępowanie typów w kolumna nazwy (zamówienie sprzedaży! 2! SalesOrderID! IDENTYFIKATORA, Odbiorca! 1! SalesOrderIDList! IDREFS).

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 C, Sales.SalesOrderHeader SOH
WHERE  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 C, Sales.SalesOrderHeader SOH
WHERE  C.CustomerID = SOH.CustomerID
ORDER BY [Customer!1!CustomerID] ,
         [SalesOrder!2!SalesOrderID!ID],
         [Customer!1!SalesOrderIDList!IDREFS]
FOR XML EXPLICIT

See Also

Reference