Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Atrybut elementu można określić jako atrybut typu identyfikatora , a atrybut IDREFS może następnie służyć do odwoływania się do niego. Umożliwia to tworzenie linków wewnątrz dokumentów i jest podobne do relacji klucza podstawowego i klucza obcego w relacyjnych bazach danych.
W tym przykładzie pokazano, jak można używać dyrektyw ID i IDREFS do tworzenia atrybutów typów ID i IDREFS . Ponieważ identyfikatory nie mogą być wartościami całkowitymi, wartości identyfikatorów w tym przykładzie są konwertowane. Innymi słowy, są rzutowane. Prefiksy są używane dla wartości identyfikatorów.
Załóżmy, że chcesz skonstruować kod XML, jak pokazano poniżej:
<Customer CustomerID="C1" SalesOrderIDList=" O11 O22 O33..." >
<SalesOrder SalesOrderID="O11" OrderDate="..." />
<SalesOrder SalesOrderID="O22" OrderDate="..." />
<SalesOrder SalesOrderID="O33" OrderDate="..." />
...
</Customer>
Atrybut SalesOrderIDList<Customer> elementu jest atrybutem wielowartościowym, który odwołuje się do SalesOrderID atrybutu <SalesOrder> elementu. Aby ustanowić ten link, SalesOrderID atrybut musi być zadeklarowany typu ID , a SalesOrderIDList atrybut <Customer> elementu musi być zadeklarowany jako IDREFS typ. Ponieważ klient może zażądać kilku zamówień, używa się typu IDREFS.
Elementy typu IDREFS mają również więcej niż jedną wartość. W związku z tym należy użyć oddzielnej klauzuli select, która ponownie wykorzysta ten sam tag, element nadrzędny i informacje kolumn klucza.
ORDER BY Następnie należy upewnić się, że sekwencja wierszy tworzących wartości IDREFS jest pogrupowana razem w ramach ich elementu nadrzędnego.
Jest to zapytanie, które generuje odpowiedni kod XML. Zapytanie używa dyrektyw ID i IDREFS do nadpisywania typów w nazwach kolumn (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;