SQL en het gebruik van For XML: Explicit en Path

Geschreven door: op maandag 30 december 2019

Leestijd:

In mijn vorige blog hebben we For XML Raw en For XML Auto besproken. In deze blog zullen we For XML Explicit en For XML Path doornemen. 

Hieronder eerst wat uitleg over beide:

  1. EXPLICIT: Met deze modus heb je meer controle over hoe de XML vorm gegeven wordt. Je kunt hier gebruik maken van bijv. elementen en attributen om de XML vorm te geven. Hierdoor heb je veel invloed op hoe de XML wordt opgebouwd. Het nadeel van de EXPLICIT modus is dat het nogal een werk kan zijn om een wat complexere XML op te bouwen via query’s.

  2. PATH: Om het schrijven van query’s voor complexere XML bestanden wat simpeler te maken kun je van deze modus gebruik maken.

For XML Explicit

Laten we zeggen dat we de volgende XML willen hebben:

SQL For XML Path Query 2

We zullen weer dezelfde voorbeeld tabellen gebruiken als in de vorige blog:
SQL For XML Path Query 2

Aangezien er in de XML 3 levels zijn, moeten we om deze XML te genereren binnen deze modus een 3-tal query’s schrijven:

SQL For XML Path Query 2

In de eerste query geven we de kolomnamen op die we gaan gebruiken in de XML. TAG is 1 en Parent is NULL want dit is het top level. Binnen dit level willen we alleen het <Person> element met daarbij het attribuut PersonId, dit zie je ook terug in de query. De rest van de elementen zijn namelijk NULL in de query.

In het volgende level willen we de naam van de persoon. Dit is level 2 welke onder level 1 komt te staan, dus TAG is 2 en Parent is 1. Binnen deze query geven we de voor- en achternaam van de persoon op. De andere waarden kunnen NULL blijven.

Als laatste willen we het adres van de persoon binnen een apart element onder de naam va de persoon. Hier geven we TAG is 3 op en als Parent 1, want deze moet niet genesteld worden onder naam maar onder het persoon element. Hier geven we de stad en het land op als waarden en de rest laten we NULL.

Aan het einde van de query staat een ORDER BY wat belangrijk is binnen deze modus. Zo weet FOR XML hoe je de XML opgebouwd wilt hebben en zal op basis hiervan de XML genereren. Stel we laten deze weg dan komt de XML er als volgt uit te zien:

SQL For XML Path Query 2

Voor meer informatie en voorbeelden voor deze modus, zie: https://docs.microsoft.com/en-us/sql/relational-databases/xml/use-explicit-mode-with-for-xml?view=sql-server-ver15

For XML Path

Zoals je ziet is deze modus vrij query intensief. Dit is nog een hele simpele XML maar je kunt je voorstellen hoe ingewikkeld deze modus wordt als je een complexere XML in elkaar wilt zetten.

Om dit op te lossen is er de laatste modus, PATH. Zie het volgende voorbeeld:

SQL For XML Path Query 2

Deze query genereerd het volgende resultaat:
SQL For XML Path Query 2

Het resultaat is vergelijkbaar met de RAW modus, waarbij ook per rij in de resultaten een <row> wordt aangemaakt. In PATH wordt er alleen per kolom een element aangemaakt en bij RAW werden dit attributen. Ook zie je dat je door het gebruik van een alias gemakkelijk een element een andere naam kan geven.

Stel, we willen de XML genereren als die we bij EXPLICIT hebben gegenereerd. Dit doen we als volgt:

SQL For XML Path Results

Deze query geeft als resultaat:

SQL For XML Path Results

Deze query is al veel beter leesbaar dan bij het gebruik van de modus EXPLICIT. Je kunt vrij gemakkelijk sub elementen aanmaken en ook attributen zijn gemakkelijk aan te geven.

De XML zouden we ook als volgt kunnen creëren:

Dit geeft het volgende resultaat:

Hier zijn de kolommen geen attributen maar elementen geworden. Zoals je ziet kun je met PATH gemakkelijker een complexe XML opzetten.

Voor meer informatie over het gebruik van de modus PATH en meerdere voorbeelden, zie:

https://docs.microsoft.com/en-us/sql/relational-databases/xml/use-path-mode-with-for-xml?view=sql-server-ver15

Zoals je ziet kun je FOR XML op verschillende manieren gebruiken. Lees ook mijn andere blog over het gebruik van FOR XML in combinatie met Stuff().


Andere blogartikelen

  • Tabellen in HTML

    Geschreven door: op maandag 30 december 2019

    Met UL, OL en LI maak je opsommingen. Met DL, DT en DD maak je lijsten van definities. Naast opsommingen en definities is er ook nog tabulaire data: gegevens die in een tabel staan, waarbij je rijen h ...

    Bekijk het artikel »
  • Tekst manipulatie in SQL met Stuff()

    Geschreven door: op maandag 30 december 2019

    In SQL heb je een aantal ingebouwde functies die erg handig kunnen zijn. Je kunt hier bijvoorbeeld denken aan Count(), welke het totaal aantal rijen teruggeeft van een query resultaat. Maar er zijn oo ...

    Bekijk het artikel »
  • SQL en het gebruik van For XML: Raw en Auto

    Geschreven door: op maandag 30 december 2019

    Een query binnen SQL geeft natuurlijk resultaten terug. Deze kun je op verschillende manieren weergeven: als tabel, als tekst of je kunt de resultaten opslaan in een bestand. Wat ook kan, is de result ...

    Bekijk het artikel »
Bel 072 5345 888
Meer dan 40 bedrijven vertrouwen op ons
Onze Middelen en Technologieën
microsoft silver partner
Adobe partner
fd-gazellen-2018.jpg
Google analytics
partners-logo.jpg
Op de hoogte blijven?

Meld u aan voor de gratis nieuwsbrief om op de hoogte te blijven van onze activiteiten