Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Im folgenden Beispiel wird die Production.Product Tabelle abgefragt, um die ListPrice Werte StandardCost eines bestimmten Produkts abzurufen. Um die Abfrage interessant zu machen, werden beide Preise in einem <Price> Element zurückgegeben, und jedes <Price> Element verfügt über ein PriceType Attribut.
Beispiel
Dies ist die erwartete Form des XML:This is the expected shape of the XML:
<xsd:schema xmlns:schema="urn:schemas-microsoft-com:sql:SqlRowSet2" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="https://schemas.microsoft.com/sqlserver/2004/sqltypes" targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet2" elementFormDefault="qualified">
<xsd:import namespace="https://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="https://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
<xsd:element name="Production.Product" type="xsd:anyType" />
</xsd:schema>
<Production.Product xmlns="urn:schemas-microsoft-com:sql:SqlRowSet2" ProductID="520">
<Price xmlns="" PriceType="ListPrice">133.34</Price>
<Price xmlns="" PriceType="StandardCost">98.77</Price>
</Production.Product>
Dies ist die geschachtelte FOR XML-Abfrage:
USE AdventureWorks2012;
GO
SELECT Product.ProductID,
(SELECT 'ListPrice' as PriceType,
CAST(CAST(ListPrice as NVARCHAR(40)) as XML)
FROM Production.Product Price
WHERE Price.ProductID=Product.ProductID
FOR XML AUTO, TYPE),
(SELECT 'StandardCost' as PriceType,
CAST(CAST(StandardCost as NVARCHAR(40)) as XML)
FROM Production.Product Price
WHERE Price.ProductID=Product.ProductID
FOR XML AUTO, TYPE)
FROM Production.Product
WHERE ProductID=520
for XML AUTO, TYPE, XMLSCHEMA
Beachten Sie hinsichtlich der vorherigen Abfrage Folgendes:
Die äußere SELECT-Anweisung erstellt das <
Product> Element mit einem ProductID-Attribut und zwei <Price> untergeordneten Elementen.Die beiden inneren SELECT-Anweisungen erstellen zwei <
Price> Elemente, jeweils mit einem PriceType-Attribut und XML, das den Produktpreis zurückgibt.Die XMLSCHEMA-Direktive in der äußeren SELECT-Anweisung generiert das Inline-XSD-Schema, das die Form des resultierenden XML beschreibt.
Um die Abfrage interessant zu machen, können Sie die FOR XML-Abfrage schreiben und dann eine XQuery mit dem Ergebnis schreiben, um den XML-Code neu zu gestalten, wie in der folgenden Abfrage gezeigt:
SELECT ProductID,
( SELECT p2.ListPrice, p2.StandardCost
FROM Production.Product p2
WHERE Product.ProductID = p2.ProductID
FOR XML AUTO, ELEMENTS XSINIL, type ).query('
for $p in /p2/*
return
<Price PriceType = "{local-name($p)}">
{ data($p) }
</Price>
')
FROM Production.Product
WHERE ProductID = 520
FOR XML AUTO, TYPE
Im vorherigen Beispiel wird die query() Methode des xml Datentyps verwendet, um den von der inneren FOR XML-Abfrage zurückgegebenen XML-Code abzufragen und das erwartete Ergebnis zu erstellen.
Dies ist das Ergebnis:
<Production.Product ProductID="520">
<Price PriceType="ListPrice">133.3400</Price>
<Price PriceType="StandardCost">98.7700</Price>
</Production.Product>