Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se puede especificar un atributo de elemento como un ID atributo de tipo y, a continuación, se puede usar el IDREFS atributo para hacer referencia a él. Esto permite vínculos dentro del documento y es similar a las relaciones de clave principal y clave externa en bases de datos relacionales.
En este ejemplo se muestra cómo se pueden usar las directivas ID y IDREFS para crear atributos de tipos ID y IDREFS. Dado que los identificadores no pueden ser valores enteros, los valores de identificador de este ejemplo se convierten. En otras palabras, están encasillados. Los prefijos se usan para los valores de identificador.
Supongamos que desea construir XML como se muestra en lo siguiente:
<Customer CustomerID="C1" SalesOrderIDList=" O11 O22 O33..." >
<SalesOrder SalesOrderID="O11" OrderDate="..." />
<SalesOrder SalesOrderID="O22" OrderDate="..." />
<SalesOrder SalesOrderID="O33" OrderDate="..." />
...
</Customer>
El SalesOrderIDList atributo del <>Customerelemento es un atributo multivalor que hace referencia al SalesOrderID atributo del <SalesOrder> elemento . Para establecer este vínculo, el SalesOrderID atributo debe declararse de ID tipo y el SalesOrderIDList atributo del><Customerelemento debe declararse de IDREFS tipo. Dado que un cliente puede solicitar varios pedidos, se usa el IDREFS tipo .
Los elementos de tipo IDREFS también tienen más de un valor. Por lo tanto, debe usar una cláusula select independiente que reutilizará la misma información de las columnas de etiqueta, padre y clave. A ORDER BY continuación, debe asegurarse de que la secuencia de filas que componen los IDREFS valores aparece agrupada bajo su elemento principal.
Esta es la consulta que genera el XML que desea. La consulta usa las directivas ID y IDREFS para redefinir los tipos de los nombres de columna (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;