Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
Hier volgen de specifieke voorwaarden waarin rijensetkolommen met een naam worden toegewezen, hoofdlettergevoelig, aan de resulterende XML:
De kolomnaam begint met een bijteken (
@).De kolomnaam begint niet met een aanteken (
@).De kolomnaam begint niet met een bijteken (
@) en bevat een slash (/).Meerdere kolommen delen hetzelfde voorvoegsel.
Eén kolom heeft een andere naam.
Kolomnaam begint met een bijteken (@)
Als de kolomnaam begint met een at-teken (@) en geen slashteken (/) bevat, wordt een kenmerk van het row element met de bijbehorende kolomwaarde gemaakt. Met de volgende query wordt bijvoorbeeld een rijset met twee kolommen (@PmId, Name) geretourneerd. In de resulterende XML wordt een PmId kenmerk toegevoegd aan het bijbehorende row element en wordt er een waarde ProductModelID aan toegewezen.
SELECT ProductModelID as "@PmId",
Name
FROM Production.ProductModel
WHERE ProductModelID = 7
FOR XML PATH;
Dit is het resultaat:
<row PmId="7">
<Name>HL Touring Frame</Name>
</row>
Kenmerken moeten vóór andere knooppunttypen, zoals elementknooppunten en tekstknooppunten, op hetzelfde niveau worden geleverd. De volgende query retourneert een fout:
SELECT Name,
ProductModelID as "@PmId"
FROM Production.ProductModel
WHERE ProductModelID = 7
FOR XML PATH;
Kolomnaam begint niet met een bijteken (@)
Als de kolomnaam niet begint met een bijteken (@), geen van de XPath-knooppunttests betreft, en geen schuine streep (/) bevat, wordt er standaard een XML-element gemaakt dat een subelement van het rijelement row is.
Met de volgende query geeft u de kolomnaam op, het resultaat. Daarom wordt een result kindelement toegevoegd aan het row element.
SELECT 2 + 2 as result
for xml PATH;
Dit is het resultaat:
<row>
<result>4</result>
</row>
De volgende query specificeert de kolomnaam ManuWorkCenterInformation voor de XML die wordt geretourneerd door de XQuery, opgegeven tegen de Instructions kolom van het xml-type. Daarom wordt een ManuWorkCenterInformation element toegevoegd als een onderliggend element van het row element.
SELECT
ProductModelID,
Name,
Instructions.query(
'declare namespace MI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
/MI:root/MI:Location
') as ManuWorkCenterInformation
FROM Production.ProductModel
WHERE ProductModelID=7
FOR XML PATH;
Dit is het resultaat:
<row>
<ProductModelID>7</ProductModelID>
<Name>HL Touring Frame</Name>
<ManuWorkCenterInformation>
<MI:Location ...LocationID="10" ...></MI:Location>
<MI:Location ...LocationID="20" ...></MI:Location>
...
</ManuWorkCenterInformation>
</row>
Kolomnaam begint niet met een bijteken (@) en bevat een slash (/)
Als de kolomnaam niet begint met een bijteken (@), maar wel een slash (/), geeft de kolomnaam een XML-hiërarchie aan. Als de kolomnaam bijvoorbeeld 'Name1/Name2/Name3.../Namen' is, vertegenwoordigt elke naami een elementnaam die is genest in het huidige rijelement (voor i = 1) of dat zich onder het element met de naami-1 bevindt. Als naamn begint met @, wordt deze toegewezen aan een kenmerk van het element Naamn-1 .
De volgende query retourneert bijvoorbeeld een werknemer-id en -naam die worden weergegeven als een complex element EmpName dat een First, Middleen Last naam bevat.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
MiddleName "EmpName/Middle",
LastName "EmpName/Last"
FROM HumanResources.Employee E, Person.Contact C
WHERE E.EmployeeID = C.ContactID AND
E.EmployeeID = 1
FOR XML PATH;
De kolomnamen worden gebruikt als pad voor het maken van XML in de PATH-modus. De kolomnaam die waarden voor werknemer-id's bevat, begint met @. Daarom wordt een kenmerk, EmpIDtoegevoegd aan het row element. Alle andere kolommen bevatten een slashmarkering (/) in de kolomnaam die de hiërarchie aangeeft. De resulterende XML bevat het EmpName-kind onder het row-element en het EmpName-kind heeft de elementen First, Middle en Last als kinderen.
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
</row>
De middelste naam van de werknemer is null en de null-waarde wordt standaard toegewezen aan het ontbreken van het element of kenmerk. Als u elementen wilt genereren voor de NULL-waarden, kunt u de ELEMENTEN-instructie opgeven met XSINIL, zoals wordt weergegeven in deze query.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
MiddleName "EmpName/Middle",
LastName "EmpName/Last"
FROM HumanResources.Employee E, Person.Contact C
WHERE E.EmployeeID = C.ContactID AND
E.EmployeeID = 1
FOR XML PATH, ELEMENTS XSINIL;
Dit is het resultaat:
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
EmpID="1">
<EmpName>
<First>Gustavo</First>
<Middle xsi:nil="true" />
<Last>Achong</Last>
</EmpName>
</row>
Standaard genereert de PATH-modus XML die is gericht op elementen. Het opgeven van de ELEMENTS-instructie in een PATH-modusquery heeft daarom geen effect. Zoals in het vorige voorbeeld wordt weergegeven, is de ELEMENTS-instructie echter handig met XSINIL om elementen voor null-waarden te genereren.
Naast de id en naam haalt de volgende query een werknemersadres op. Volgens het pad in de kolomnamen voor adreskolommen wordt een Address subelement toegevoegd aan het row element en worden de adresgegevens toegevoegd als subelementen van het Address element.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
MiddleName "EmpName/Middle",
LastName "EmpName/Last",
AddressLine1 "Address/AddrLine1",
AddressLine2 "Address/AddrLIne2",
City "Address/City"
FROM HumanResources.Employee E,
Person.Contact C,
Person.Address A
WHERE E.EmployeeID = C.ContactID
AND E.AddressID = A.AddressID
AND E.EmployeeID = 1
FOR XML PATH;
Dit is het resultaat:
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
</row>
Meerdere kolommen delen hetzelfde padvoorvoegsel
Als meerdere volgende kolommen hetzelfde padvoorvoegsel delen, worden ze gegroepeerd onder dezelfde naam. Als er verschillende naamruimtevoorvoegsels worden gebruikt, zelfs als ze gebonden zijn aan dezelfde naamruimte, wordt een pad als anders beschouwd. In de vorige query delen de FirstName, MiddleNameen LastName kolommen hetzelfde EmpName voorvoegsel. Daarom worden ze toegevoegd als subelementen van het EmpName element. Dit is ook het geval wanneer u het Address element in het vorige voorbeeld hebt gemaakt.
Eén kolom heeft een andere naam
Als een kolom met een andere naam ertussen wordt weergegeven, wordt de groepering verbroken, zoals wordt weergegeven in de volgende gewijzigde query. De query breekt de groepering van FirstName, MiddleNameen LastName, zoals opgegeven in de vorige query, door adreskolommen toe te voegen tussen de FirstName ene MiddleName kolom.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
AddressLine1 "Address/AddrLine1",
AddressLine2 "Address/AddrLIne2",
City "Address/City",
MiddleName "EmpName/Middle",
LastName "EmpName/Last"
FROM HumanResources.EmployeeAddress E,
Person.Contact C,
Person.Address A
WHERE E.EmployeeID = C.ContactID
AND E.AddressID = A.AddressID
AND E.EmployeeID = 1
FOR XML PATH;
Als gevolg hiervan maakt de query twee EmpName elementen. Het eerste EmpName-element heeft het FirstName-element als kind en het tweede EmpName-element heeft de MiddleName- en LastName-elementen als kinderen.
Dit is het resultaat:
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
<EmpName>
<Last>Achong</Last>
</EmpName>
</row>