Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
In de volgende voorbeelden ziet u het gebruik van de AUTO-modus. Veel van deze query's worden opgegeven op basis van XML-documenten voor fietsproductieinstructies die zijn opgeslagen in de kolom Instructies van de tabel ProductModel in de voorbeelddatabase AdventureWorks2025.
Voorbeeld: informatie over klant-, order- en ordergegevens ophalen
Met deze query worden klant-, order- en ordergegevens opgehaald voor een specifieke klant.
USE AdventureWorks2022;
GO
SELECT Cust.CustomerID,
OrderHeader.CustomerID,
OrderHeader.SalesOrderID,
Detail.SalesOrderID, Detail.LineTotal, Detail.ProductID,
Product.Name,
Detail.OrderQty
FROM Sales.Customer AS Cust
INNER JOIN Sales.SalesOrderHeader AS OrderHeader
ON Cust.CustomerID = OrderHeader.CustomerID
INNER JOIN Sales.SalesOrderDetail AS Detail
ON OrderHeader.SalesOrderID = Detail.SalesOrderID
INNER JOIN Production.Product AS Product
ON Product.ProductID = Detail.ProductID
WHERE Cust.CustomerID IN (29672, 29734)
ORDER BY OrderHeader.CustomerID,
OrderHeader.SalesOrderID
FOR XML AUTO;
Omdat de query de bijbehorende elementen identificeert, Cust, , OrderHeaderDetailen Product tabelaliassen, worden de bijbehorende elementen gegenereerd door de AUTO modus. Nogmaals, de volgorde waarin tabellen worden geïdentificeerd door de kolommen die zijn opgegeven in de SELECT component bepalen de hiërarchie van deze elementen.
Dit is het gedeeltelijke resultaat.
<Cust CustomerID="29672">
<OrderHeader CustomerID="29672" SalesOrderID="43660">
<Detail SalesOrderID="43660" LineTotal="874.794000" ProductID="758" OrderQty="1">
<Product Name="Road-450 Red, 52" />
</Detail>
<Detail SalesOrderID="43660" LineTotal="419.458900" ProductID="762" OrderQty="1">
<Product Name="Road-650 Red, 44" />
</Detail>
</OrderHeader>
<OrderHeader CustomerID="29672" SalesOrderID="47660">
<Detail SalesOrderID="47660" LineTotal="469.794000" ProductID="765" OrderQty="1">
<Product Name="Road-650 Black, 58" />
</Detail>
</OrderHeader>
<OrderHeader CustomerID="29672" SalesOrderID="49857">
<Detail SalesOrderID="49857" LineTotal="44.994000" ProductID="852" OrderQty="1">
<Product Name="Women's Tights, S" />
</Detail>
</OrderHeader>
...
</Cust>
Voorbeeld: GROUP BY en statistische functies opgeven
De volgende query retourneert afzonderlijke klant-id's en het aantal orders dat de klant heeft aangevraagd.
USE AdventureWorks2022;
GO
SELECT C.CustomerID, COUNT(*) AS NoOfOrders
FROM Sales.Customer AS C
INNER JOIN Sales.SalesOrderHeader AS SOH
On C.CustomerID = SOH.CustomerID
GROUP BY C.CustomerID
FOR XML AUTO;
Dit is het gedeeltelijke resultaat:
<I CustomerID="11000" NoOfOrders="3" />
<I CustomerID="11001" NoOfOrders="3" />
...
Voorbeeld: Berekende kolommen opgeven in automodus
Deze query retourneert samengevoegde namen van afzonderlijke klanten en de ordergegevens. Omdat de berekende kolom op dat moment is toegewezen aan het binnenste niveau, is het <SOH> element in dit voorbeeld. De samengevoegde klantnamen worden toegevoegd als kenmerken van het <SOH> element in het resultaat.
USE AdventureWorks2022;
GO
SELECT P.FirstName + ' ' + P.LastName AS Name,
SOH.SalesOrderID
FROM Sales.Customer AS C
INNER JOIN Sales.SalesOrderHeader AS SOH
ON C.CustomerID = SOH.CustomerID
INNER JOIN Person.Person AS P
ON P.BusinessEntityID = C.PersonID
FOR XML AUTO;
Dit is het gedeeltelijke resultaat:
<SOH Name="Jon Yang" SalesOrderID="43793" />
<SOH Name="Eugene Huang" SalesOrderID="43767" />
Als u de <IndividualCustomer> elementen wilt ophalen met het Name kenmerk dat de informatie van elke verkooporderheader als subelement bevat, wordt de query herschreven met behulp van een subselect. Met de binnenste selectie wordt een tijdelijke IndividualCustomer tabel gemaakt met de berekende kolom die de namen van de afzonderlijke klanten bevat. Deze tabel wordt vervolgens toegevoegd aan de SalesOrderHeader tabel om het resultaat te verkrijgen.
In de Sales.Customer tabel worden afzonderlijke klantgegevens opgeslagen, inclusief de PersonID waarde voor die klant. Deze PersonID wordt vervolgens gebruikt om de naam van de contactpersoon in de Person.Person tabel te vinden.
SELECT IndividualCustomer.Name, SOH.SalesOrderID
FROM (SELECT FirstName+ ' '+LastName AS Name, C.PersonID, C.CustomerID
FROM Sales.Customer AS C, Person.Person AS P
WHERE C.PersonID = P.BusinessEntityID) AS IndividualCustomer
LEFT OUTER JOIN Sales.SalesOrderHeader AS SOH
ON IndividualCustomer.CustomerID = SOH.CustomerID
ORDER BY IndividualCustomer.CustomerID, SOH.CustomerID FOR XML AUTO;
Dit is het gedeeltelijke resultaat:
<IndividualCustomer Name="Jon Yang">
<SOH SalesOrderID="43793" />
<SOH SalesOrderID="51522" />
<SOH SalesOrderID="57418" />
</IndividualCustomer>
...
Voorbeeld: Binaire gegevens retourneren
Deze query retourneert een productfoto uit de ProductPhoto tabel.
ThumbNailPhoto is een varbinary(max)-kolom in tabel ProductPhoto. Standaard retourneert de modus AUTO naar de binaire gegevens een verwijzing die een relatieve URL is naar de virtuele hoofdmap van de database waarop de query wordt uitgevoerd. Het ProductPhotoID sleutelkenmerk moet worden opgegeven om de afbeelding te identificeren. Bij het ophalen van een afbeeldingsverwijzing zoals geïllustreerd in dit voorbeeld, moet de primaire sleutel van de tabel ook worden opgegeven in de SELECT component om een rij uniek te identificeren.
SELECT ProductPhotoID, ThumbNailPhoto
FROM Production.ProductPhoto
WHERE ProductPhotoID = 70
FOR XML AUTO;
Dit is het resultaat:
<Production.ProductPhoto
ProductPhotoID="70"
ThumbNailPhoto= "dbobject/Production.ProductPhoto[@ProductPhotoID='70']/@ThumbNailPhoto" />
Dezelfde query wordt uitgevoerd met de BINARY BASE64 optie. De query retourneert de binaire gegevens in de met base64 gecodeerde indeling.
SELECT ProductPhotoID, ThumbNailPhoto
FROM Production.ProductPhoto
WHERE ProductPhotoID = 70
FOR XML AUTO, BINARY BASE64;
Dit is het resultaat:
<Production.ProductPhoto ProductPhotoID="70" ThumbNailPhoto="Base64 encoded photo" />
Wanneer u de AUTO-modus gebruikt om binaire gegevens op te halen, wordt standaard een verwijzing naar een relatieve URL naar de virtuele hoofdmap van de database waarin de query is uitgevoerd, geretourneerd in plaats van de binaire gegevens. Dit gebeurt als de optie BINARY BASE64 niet is opgegeven.
Wanneer de AUTO-modus een URL retourneert naar de binaire gegevens in hoofdlettergevoelige databases waarbij een tabel- of kolomnaam die is opgegeven in de query niet overeenkomt met de tabel- of kolomnaam in de database, wordt de query uitgevoerd. Het geval dat in de verwijzing wordt geretourneerd, is echter niet consistent. Voorbeeld:
SELECT ProductPhotoID, ThumbnailPhoto
FROM Production.ProductPhoto
WHERE ProductPhotoID=70
FOR XML AUTO;
Dit is het resultaat:
<Production.PRODUCTPHOTO
PRODUCTPHOTOID="70"
THUMBNAILPHOTO= "dbobject/Production.PRODUCTPHOTO[@ProductPhotoID='70']/@ThumbNailPhoto" />
Dit kan een probleem zijn, met name wanneer dbobject query's worden uitgevoerd op een hoofdlettergevoelige database. Om dit te voorkomen, moet het hoofdlettergebruik van de tabel- of kolomnaam die in de query's is opgegeven, overeenkomen met het hoofdlettergebruik van de tabel- of kolomnaam in de database.
Voorbeeld: Inzicht in de codering
In dit voorbeeld ziet u de verschillende coderingen die in het resultaat voorkomen.
Maak deze tabel:
CREATE TABLE [Special Chars] (Col1 char(1) primary key, [Col#&2] varbinary(50));
Voeg de volgende gegevens toe aan de tabel:
INSERT INTO [Special Chars] VALUES ('&', 0x20), ('#', 0x20);
Met deze query worden de gegevens uit de tabel geretourneerd. De modus FOR XML AUTO is opgegeven. Binaire gegevens worden geretourneerd als verwijzing.
SELECT * FROM [Special Chars] FOR XML AUTO;
Dit is het resultaat:
<Special_x0020_Chars Col1="#"
Col_x0023__x0026_2="dbobject/Special_x0020_Chars[@Col1='#']/@Col_x0023__x0026_2"
/>
<Special_x0020_Chars Col1="&"
Col_x0023__x0026_2="dbobject/Special_x0020_Chars[@Col1='&']/@Col_x0023__x0026_2"
/>
Dit is het proces voor het coderen van speciale tekens in het resultaat:
In het queryresultaat worden de speciale XML- en URL-tekens in het element en de kenmerknamen die worden geretourneerd, gecodeerd met behulp van de hexadecimale waarde van het bijbehorende Unicode-teken. In het vorige resultaat wordt de elementnaam
<Special Chars>geretourneerd als<Special_x0020_Chars>. De kenmerknaam<Col#&2>wordt geretourneerd als<Col_x0023__x0026_2>. Zowel speciale XML- als URL-speciale tekens worden gecodeerd.Als de waarden van de elementen of het kenmerk een van de vijf standaard-XML-tekenentiteiten (', '', '' <en >'' en &) bevatten, worden deze speciale XML-tekens altijd gecodeerd met xml-tekencodering. In het vorige resultaat is de waarde
&in de waarde van het kenmerk<Col1>gecodeerd als&. Het teken #blijft echter #, omdat het een geldig XML-teken is en geen speciaal XML-teken.Als de waarden van de elementen of kenmerken speciale URL-tekens bevatten die een speciale betekenis hebben in de URL, worden ze alleen gecodeerd in de WAARDE van de DBOBJECT-URL en worden ze alleen gecodeerd wanneer het speciale teken deel uitmaakt van een tabel- of kolomnaam. In het resultaat wordt het teken
#dat deel uitmaakt van de tabelnaamCol#&2gecodeerd als_x0023_ in the DBOJBECT URL.