Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um atributo de elemento pode ser especificado como um ID atributo de tipo e, em seguida, o IDREFS atributo pode ser usado para se referir a ele. Isso habilita links dentro do documento e é semelhante às relações de chave primária e chave estrangeira em bancos de dados relacionais.
Este exemplo ilustra como as diretivas ID e IDREFS podem ser usadas para criar atributos dos tipos ID e IDREFS. Como as IDs não podem ser valores inteiros, os valores de ID neste exemplo são convertidos. Em outras palavras, eles são digitados. Os prefixos são usados para os valores de ID.
Suponha que você queira construir XML conforme mostrado no seguinte:
<Customer CustomerID="C1" SalesOrderIDList=" O11 O22 O33..." >
<SalesOrder SalesOrderID="O11" OrderDate="..." />
<SalesOrder SalesOrderID="O22" OrderDate="..." />
<SalesOrder SalesOrderID="O33" OrderDate="..." />
...
</Customer>
O SalesOrderIDList atributo do <>Customerelemento é um atributo multivalorizado que se refere ao SalesOrderID atributo do <SalesOrder> elemento. Para estabelecer esse link, o atributo SalesOrderID deve ser declarado do tipo ID, e o atributo SalesOrderIDList do elemento <Customer> deve ser declarado do tipo IDREFS. Como um cliente pode solicitar vários pedidos, o IDREFS tipo é usado.
Elementos do tipo IDREFS também têm mais de um valor. Portanto, você precisa usar uma cláusula de seleção separada que reutilize as mesmas informações de coluna de etiqueta, pai e chave. É necessário garantir que a sequência de linhas que compõem os valores de IDREFS apareça agrupada sob o seu elemento pai.
Essa é a consulta que produz o XML desejado. A consulta usa as diretivas ID e IDREFS para substituir os tipos nos nomes das colunas (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;