Magazine

XQuery e campi XML in SQL Server: modificare gli xml

Roberto Schiabel

29/01/2007

Leggere un XML e' l'operazione richiesta nel 110% dei casi. Modificare un xml non e' una operazione cosi' rara come puo' sembrare.

0%100%
per esprimere un voto รจ necessario registrarsi al sito

SQL, XML

Eccoci alla 2a puntata sulle xquery.

Nel precedente articolo abbiamo visto alcuni esempi per recupero dati da documenti xml.

Questa volta, utilizzando lo stesso esempio come base, vedremo come apportare modifiche ai documenti xml presenti nel nostro database.

Ma veniamo subito al sodo.

Se volessimo aggiungere un prodotto in un listino

UPDATE tabellaXML
SET testoXML.modify('insert <prezzo listino="AU_AUD" xsi:type="xsd:decimal">25.2</prezzo>
      as last into (//prodotto[@codice="product2"]/prezzi)[1]')
WHERE testoXML.exist('(//prodotto[@codice="product2"])') = 1

mentre se volessimo rimuovere un prodotto da un listino

UPDATE tabellaXML
SET testoXML.modify('delete  //prodotto/prezzi/prezzo[@listino="AU_AUD"])')
WHERE testoXML.exist('(//prodotto[@codice="product2"])') = 1

Gli esempi sopra riportati, mostrano come modificare il contenuto di un elemento (prodotto), una volta che e' stato identificato.
E' possibile agire anche all'esterno dell'elemento desiderato.

Se volessimo aggiungere un prodotto alla nostra lista di prodotti, giusto a seguito di un prodotto gia' presente,

UPDATE tabellaXML
SET testoXML.modify('insert   <prodotto codice="product5">
    <nome xsi:type="xsd:string">product5: questo e'' il prodotto5</nome>
    <descrizione xsi:type="xsd:string">descrizione corta!</descrizione>
    </prodotto>
              after (//prodotto[@codice="product2"])[1]')
WHERE testoXML.exist('(//prodotto[@codice="product2"])') = 1

Se quest'ultimo esempio vi puo' risultare difficile da applicare, allora proviamo a rapportarlo ad un caso reale: un ordine.

Se avessimo dei prodotti legati fra loro, o semplicemente delle righe fittizie (es: "installazione gratis"),
a posteriori potremmo aggiungere queste righe all'ordine senza la necessita' di complicare la logica del nostro carrello.

Alcuni casi pratici:

  • accessori per un macchinario (cavetteria per scheda hardware),
  • omaggio se acquistata una certa quantita' di un prodotto (toner omaggio se ordinate 5 stampanti)
  • prodotti secondo consumo medio del cliente (cancelleria e toner),
  • ... etc

 altro ?

strumenti utilizzati

  • SQL Server 2005 Express
  • Notepad2

Commenti
Nome

Sito web
Commento


indietro