Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Ett elementattribut kan anges som ett ID-typattribut och IDREFS-attributet kan sedan användas för att referera till det. Detta möjliggör länkar mellan dokument och liknar primärnyckeln och sekundärnyckelrelationer i relationsdatabaser.
Det här exemplet illustrerar hur ID - och IDREFS-direktiven kan användas för att skapa attribut av ID - och IDREFS-typer . Eftersom ID:t inte kan vara heltalsvärden konverteras ID-värdena i det här exemplet. Med andra ord är de typ gjutna. Prefixer används för ID-värdena.
Anta att du vill skapa XML enligt följande:
<Customer CustomerID="C1" SalesOrderIDList=" O11 O22 O33..." >
<SalesOrder SalesOrderID="O11" OrderDate="..." />
<SalesOrder SalesOrderID="O22" OrderDate="..." />
<SalesOrder SalesOrderID="O33" OrderDate="..." />
...
</Customer>
Attributet SalesOrderIDList för elementet <Customer> är ett flervärdesattribut som refererar till SalesOrderID elementets <SalesOrder> attribut. För att upprätta den här SalesOrderID länken måste attributet deklareras av ID typ, och SalesOrderIDList attributet för <Customer> elementet måste deklareras av IDREFS typ. Eftersom en kund kan begära flera beställningar IDREFS används typen.
Element av IDREFS-typ har också mer än ett värde. Därför måste du använda en separat SELECT-sats som återanvänder samma tagg-, föräldra- och nyckelkolumnsinformation.
ORDER BY måste sedan säkerställa att sekvensen med rader som utgör IDREFS-värdena visas grupperade tillsammans under deras överordnade element.
Det här är frågan som genererar den XML du vill ha. Frågan använder direktiven ID och IDREFS för att skriva över typerna i kolumnnamnen (SalesOrder!2!SalesOrderID!ID, Customer!1!SalesOrderIDList!IDREFS).
USE AdventureWorks2022;
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.CustomerID
ORDER BY [Customer!1!CustomerID] ,
[SalesOrder!2!SalesOrderID!ID],
[Customer!1!SalesOrderIDList!IDREFS]
FOR XML EXPLICIT;