Przykład: Określenie Identyfikatora i dyrektyw IDREFS
Atrybutu element może być określony jako ID atrybut typu i IDREFS atrybut może być następnie używany do odwoływania się do niejTo umożliwia łącza wewnątrz dokumentu i jest podobny do klucz podstawowy i relacje klucz obcy w relacyjnych bazach danych.
Ten przykład ilustruje sposób ID i IDREFS dyrektyw mogą być używane do tworzenia atrybuty ID i IDREFS typów.Ponieważ identyfikatory nie mogą być wartości całkowite, wartości Identyfikatora w tym przykładzie są konwertowane.Innymi słowy są one rzutować typu.Prefiksy są używane wartości Identyfikatora.
Przyjmijmy chcesz skonstruować XML, jak pokazano poniżej:
<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 używany typ.
Elementy IDREFS Typ również mieć więcej niż jedną wartość.Dlatego należy użyć osobnych klauzula select, który będzie ponownie użyć znaczników, nadrzędny i klucz kolumna informacji.ORDER BY Ma zapewnić, że kolejność wierszy, które tworzą IDREFS wartości pojawia się zgrupowane razem pod ich elementu nadrzędnego.
Jest to kwerenda, która produkuje XML ma.W kwerendzie użyto ID i IDREFS dyrektyw w celu zastąpienia typów w kolumna nazwy (SalesOrder!2!SalesOrderID!ID, Customer!1!SalesOrderIDList!IDREFS).
USE AdventureWorks2008R2;
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.CustomerIDORDER BY [Customer!1!CustomerID] ,
[SalesOrder!2!SalesOrderID!ID],
[Customer!1!SalesOrderIDList!IDREFS]
FOR XML EXPLICIT;