Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Atribut elementu lze zadat jako atribut typu ID a atribut IDREFS se pak dá použít k odkaz na něj. To umožňuje propojení uvnitř dokumentů a podobá se relacím primárního a cizího klíče v relačních databázích.
Tento příklad ukazuje, jak lze direktivy ID a IDREFS použít k vytvoření atributů typů ID a IDREFS . Vzhledem k tomu, že ID nemohou být celočíselné hodnoty, hodnoty ID v tomto příkladu se převedou. Jinými slovy, jsou přetypovány. Předpony se používají pro hodnoty ID.
Předpokládejme, že chcete vytvořit XML, jak je znázorněno v následujícím příkladu:
<Customer CustomerID="C1" SalesOrderIDList=" O11 O22 O33..." >
<SalesOrder SalesOrderID="O11" OrderDate="..." />
<SalesOrder SalesOrderID="O22" OrderDate="..." />
<SalesOrder SalesOrderID="O33" OrderDate="..." />
...
</Customer>
Atribut SalesOrderIDList elementu <Customer> je vícehodnotový atribut, který odkazuje na SalesOrderID atribut <SalesOrder> prvku. Chcete-li vytvořit toto propojení, SalesOrderID musí být atribut deklarován typu ID a SalesOrderIDList atribut <Customer> prvku musí být deklarován typu IDREFS . Vzhledem k tomu, že zákazník může požádat o několik objednávek, použije se IDREFS typ.
Prvky typu IDREFS mají také více než jednu hodnotu. Proto musíte použít samostatnou klauzuli select, která opětovně použije stejný tag, nadřazený prvek a informace o klíčovém sloupci.
ORDER BY pak musí zajistit, že posloupnost řádků, které tvoří hodnoty IDREFS, se objeví seskupená pod svým nadřazeným prvkem.
Jedná se o dotaz, který vytvoří požadovaný kód XML. Dotaz používá ID a IDREFS direktivy k přepsání typů v názvech sloupců (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;