Anteckning
Å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
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>