XML Queries in SQL

XML queries maken om in SQL blijft altijd erg lastig. Daarom hieronder een overzicht van een aantal statements hoe je dit zou kunnen doen.

Stel ik heb de volgende XML:


  Jean-Pierre
  info@freelyit.nl

Deze XML stop ik in een lokale variabele genaamd @xml

DECLARE @xml XML
SET @xml = (SELECT xmlfield FROM bepaaldeTabel WHERE Id = 1)

Element leeg of bestaat niet

Wil je controleren of een element leeg is of niet bestaat, dan kun je hiervoor het keyword “exist” gebruiken. Exist geeft namelijk een 0 terug wanneer het element leeg is of helemaal niet bestaan.
Zie het voorbeeld hieronder waar ik check of het veld “Name” leeg is of niet bestaat.

IF (@IntegrationXml.exist('/Customer/Name/text()') = 1)

Aanpassen van een waarde

Dit kunnen we met het “modify” keyword in combinatie met “replace of” voor elkaar krijgen. Zie het voorbeeld hieronder waar ik de waarde van “Name” vervang door “Piet”.

SET @xml.modify('replace value of (/Customer/Name/text())[1] with sql:variable("Piet")')

Element van een waarde voorzien

Stel het element “Name” heeft nog geen waarde en je wilt deze voorzien van een waarde, dan kun je dit wederom met het keyword “modify” doen in combinatie met “insert text”.
Dit werkt dus alleen op het moment dat het element wel bestaat.
Zie het voorbeeld hieronder, waar ik “Name” de waarde “Piet” geef.

SET @xml.modify('insert text{sql:variable("Piet")} into (/Customer/Name)[1]')

Element toevoegen

Stel je wilt het element “Phone” toevoegen onder “Customer”. Dan kun je dit doen met het keyword “modify” in combinatie met “insert element”.
Zie het voorbeeld hieronder.

SET @xml.modify('insert element Phone {sql:variable("123445435")} as last into (/Customer)[1]')

Element Verwijderen

Stel je wilt het element “Phone” verwijderen onder “Customer”. Dan kun je dit doen met het keyword “modify” in combinatie met “delete”.
Zie het voorbeeld hieronder.

SET @xml.modify('delete (/Customer/Phone)')

Bovenstaande voorbeelden zijn allemaal uitgevoerd op een lokale variabelen. Wil je deze aanpassing echt doorvoeren in de database, dan zul je het veld “@xml” moeten gebruiken in een eenvoudig update script.

About Jean-Pierre Broeders

Jean-Pierre Broeders is sinds 2000 werkzaam als software engineer. Sinds 2006 heeft hij een eigen bedrijf genaamd FreelyIT waar hij als freelancer opdrachten uitvoert in de rol van senior .NET developer, consultant en integratie specialist.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.