Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Assuma que queres construir um XML que forneça informação sobre encomendas de vendas. Neste exemplo, <SalesPerson> e <OrderDetail> elementos são irmãos. Cada Ordem tem um <OrderHeader> elemento, um <SalesPerson> elemento e um ou mais <OrderDetail> elementos.
<OrderHeader SalesOrderID=... OrderDate=... CustomerID=... >
<SalesPerson SalesPersonID=... />
<OrderDetail SalesOrderID=... LineTotal=... ProductID=... OrderQty=... />
<OrderDetail SalesOrderID=... LineTotal=... ProductID=... OrderQty=.../>
...
</OrderHeader>
<OrderHeader ...</OrderHeader>
A seguinte consulta em modo EXPLICIT constrói este XML. A consulta especifica Tag valores de 1 para o <OrderHeader> elemento, 2 para o <SalesPerson> elemento e 3 para o <OrderDetail> elemento. Como <SalesPerson> e <OrderDetail> são irmãos, a consulta especifica o mesmo Parent valor de etiqueta 1 identificando o <OrderHeader> elemento.
USE AdventureWorks2022;
GO
SELECT 1 as Tag,
0 as Parent,
SalesOrderID as [OrderHeader!1!SalesOrderID],
OrderDate as [OrderHeader!1!OrderDate],
CustomerID as [OrderHeader!1!CustomerID],
NULL as [SalesPerson!2!SalesPersonID],
NULL as [OrderDetail!3!SalesOrderID],
NULL as [OrderDetail!3!LineTotal],
NULL as [OrderDetail!3!ProductID],
NULL as [OrderDetail!3!OrderQty]
FROM Sales.SalesOrderHeader
WHERE SalesOrderID=43659 or SalesOrderID=43661
UNION ALL
SELECT 2 as Tag,
1 as Parent,
SalesOrderID,
NULL,
NULL,
SalesPersonID,
NULL,
NULL,
NULL,
NULL
FROM Sales.SalesOrderHeader
WHERE SalesOrderID=43659 or SalesOrderID=43661
UNION ALL
SELECT 3 as Tag,
1 as Parent,
SOD.SalesOrderID,
NULL,
NULL,
SalesPersonID,
SOH.SalesOrderID,
LineTotal,
ProductID,
OrderQty
FROM Sales.SalesOrderHeader SOH,Sales.SalesOrderDetail SOD
WHERE SOH.SalesOrderID = SOD.SalesOrderID
AND (SOH.SalesOrderID=43659 or SOH.SalesOrderID=43661)
ORDER BY [OrderHeader!1!SalesOrderID], [SalesPerson!2!SalesPersonID],
[OrderDetail!3!SalesOrderID],[OrderDetail!3!LineTotal]
FOR XML EXPLICIT;
Este é o resultado parcial:
<OrderHeader SalesOrderID="43659" OrderDate="2005-07-01T00:00:00" CustomerID="676">
<SalesPerson SalesPersonID="279" />
<OrderDetail SalesOrderID="43659" LineTotal="10.373000" ProductID="712" OrderQty="2" />
<OrderDetail SalesOrderID="43659" LineTotal="28.840400" ProductID="716" OrderQty="1" />
<OrderDetail SalesOrderID="43659" LineTotal="34.200000" ProductID="709" OrderQty="6" />
...
</OrderHeader>
<OrderHeader SalesOrderID="43661" OrderDate="2005-07-01T00:00:00" CustomerID="442">
<SalesPerson SalesPersonID="282" />
<OrderDetail SalesOrderID="43661" LineTotal="20.746000" ProductID="712" OrderQty="4" />
<OrderDetail SalesOrderID="43661" LineTotal="40.373000" ProductID="711" OrderQty="2" />
...
</OrderHeader>