Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Un attribut d’élément peut être spécifié en tant qu’attribut ID de type, et l’attribut IDREFS peut ensuite être utilisé pour y faire référence. Cela permet des liens intra-document et est similaire aux relations de clé primaire et de clé étrangère dans les bases de données relationnelles.
Cet exemple illustre comment les directives ID et IDREFS peuvent être utilisées pour créer des attributs de types ID et IDREFS. Étant donné que les ID ne peuvent pas être des valeurs entières, les valeurs d’ID de cet exemple sont converties. En d’autres termes, ils sont typés. Les préfixes sont utilisés pour les valeurs d’ID.
Supposons que vous souhaitez construire du code XML comme indiqué dans les éléments suivants :
<Customer CustomerID="C1" SalesOrderIDList=" O11 O22 O33..." >
<SalesOrder SalesOrderID="O11" OrderDate="..." />
<SalesOrder SalesOrderID="O22" OrderDate="..." />
<SalesOrder SalesOrderID="O33" OrderDate="..." />
...
</Customer>
L’attribut SalesOrderIDList de l’élément <Customer> est un attribut à valeurs multiples qui fait référence à l’attribut SalesOrderID de l’élément.<SalesOrder> Pour établir ce lien, l’attribut SalesOrderID doit être déclaré de ID type et l’attribut SalesOrderIDList de l’élément><Customerdoit être déclaré de IDREFS type. Étant donné qu’un client peut demander plusieurs commandes, le IDREFS type est utilisé.
Les éléments de IDREFS type ont également plusieurs valeurs. Par conséquent, vous devez utiliser une clause select séparée qui réutilisera les mêmes informations de balise, de parent et de colonne clé. Il est ensuite nécessaire de s’assurer que la séquence de lignes qui composent les IDREFS valeurs apparaissent regroupées sous leur élément parent.
Il s’agit de la requête qui produit le code XML souhaité. La requête utilise les directives ID et IDREFS pour surcharger les types dans les noms de colonnes (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;