Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
I följande exempel efterfrågas tabellen Production.Product för att hämta ListPrice- och StandardCost-värdena för en viss produkt. För att göra frågan intressant returneras båda priserna i ett <Price> element och varje <Price> element har ett PriceType attribut.
Exempel
Det här är xml-kodens förväntade form:
<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>
Det här är den kapslade FOR XML-frågan:
USE AdventureWorks2022;
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;
Observera följande från föregående fråga:
Den yttre SELECT-instruktionen konstruerar det
<Product>element som har ett ProductID--attribut och två<Price>underordnade element.De två inre SELECT-uttrycken konstruerar två
<Price>element, var och en med ett PriceType--attribut och XML som returnerar produktpriset.XMLSCHEMA-direktivet i den yttre SELECT-instruktionen genererar det infogade XSD-schemat som beskriver formen på den resulterande XML-koden.
För att göra frågan intressant kan du skriva FOR XML-frågan och sedan skriva en XQuery mot resultatet för att omforma XML:en, som du ser i följande fråga:
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;
I föregående exempel används metoden query() i xml-datatypen för att ställa frågor mot XML som returneras av den inre FOR XML-frågan samt för att bygga det förväntade resultatet.
Det här är resultatet:
<Production.Product ProductID="520">
<Price PriceType="ListPrice">133.3400</Price>
<Price PriceType="StandardCost">98.7700</Price>
</Production.Product>