Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Un attributo di elemento può essere specificato come ID attributo di tipo e l'attributo IDREFS può quindi essere usato per farvi riferimento. Ciò consente collegamenti all'interno del documento ed è simile alle relazioni chiave primaria e di chiave esterna nei database relazionali.
In questo esempio viene illustrato come usare le direttive ID e IDREFS per creare attributi di tipi ID e IDREFS. Poiché gli ID non possono essere valori interi, i valori ID in questo esempio vengono convertiti. In altre parole, vengono inseriti nel cast. I prefissi sono utilizzati per i valori ID.
Si supponga di voler costruire codice XML come illustrato di seguito:
<Customer CustomerID="C1" SalesOrderIDList=" O11 O22 O33..." >
<SalesOrder SalesOrderID="O11" OrderDate="..." />
<SalesOrder SalesOrderID="O22" OrderDate="..." />
<SalesOrder SalesOrderID="O33" OrderDate="..." />
...
</Customer>
L'attributo SalesOrderIDList dell'elemento <Customer> è un attributo multivalore che fa riferimento all'attributo SalesOrderID dell'elemento.<SalesOrder> Per stabilire questo collegamento, l'attributo SalesOrderID deve essere dichiarato di ID tipo e l'attributo SalesOrderIDList dell'elemento><Customerdeve essere dichiarato di IDREFS tipo. Poiché un cliente può richiedere diversi ordini, viene usato il IDREFS tipo .
Anche gli elementi di IDREFS tipo hanno più di un valore. Pertanto, è necessario usare una clausola select separata che riutilicherà lo stesso tag, elemento padre e informazioni sulla colonna chiave. Deve ORDER BY quindi assicurarsi che la sequenza di righe che compongono i valori venga raggruppata sotto il IDREFS relativo elemento padre.
Si tratta della query che produce il codice XML desiderato. La query utilizza le direttive ID e IDREFS per sovrascrivere i tipi di dati nei nomi delle colonne (SalesOrder!2!SalesOrderID!ID, Customer!1!SalesOrderIDList!IDREFS).
USE AdventureWorks2012;
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;