Gestire documenti XML (Parte II)

Questo articolo parla di come gestire i documenti XML conMS SQL Server 2005, potete leggere laprima parte qui

La funzione Eventdata

La funzione Eventdata restituisce le informazioni in riguardoal server o agli eventi del database, ponendole in unavariabile di tipo XML. L' XML Schema include informazioniin riguardo a:

  • Il tipo di evento.
  • Il System Process ID (SPID) della connessione al momento dell' esecuzione.
  • Il tipo di evento che ha dato il la' all' esecuzione.

Esempio:

Creiamo un DDL trigger per prevenire la creazione di nuovetabelle nel database. La richiesta Transact-SQL, che da ilvia all' operazione, viene catturata usando XQuery neiconfronti dei dati XML generati dall' Eventdata.

USE AdventureWorks;GOCREATE TRIGGER safetyON DATABASEFOR CREATE_TABLEASPRINT 'CREATE TABLE Issued.'SELECT EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')RAISERROR ('New tables cannot be created in this database.', 16, 1)ROLLBACK;GO--Test the trigger.CREATE TABLE NewTable (Column1 int);GO--Drop the trigger.DROP TRIGGER safetyON DATABASEGO

Indici XML

Per recuperare rapidamente i dati informato XML possiamo ricorrere agli indici, da associare allecolonne con le quali andremo a lavorare. Gli indici XML sisuddividono in:

  1. Indici XML Primari;
  2. Indici XML Secondari

Il primo indice della colonna daveobbligatoriamente essere l' indice primario; in tal modoverranno supportati le seguenti tipologie di indicisecondari: PATH, VALUE e PROPERTY che possonomigliorare le prestazioni delle singole query.

Indici XML Primari:

L' indice primario è una rappresentazionedell' XML BLOBs (binary large object)  nellacolonna XML. Per ciascun BLOB presente nella colonna, l'indice crea tante file di dati quanti sono i nodi nel BLOB.Ciascuna fila immagazzina la seguenti informazioni sul nodo:

  1. il nome della TAG
  2. il valore del nodo
  3. la tipologia del nodo
  4. informazioni in riguardo all' ordine del documento
  5. il percorso che va da ciascun nodo alla root dell' XML
  6. la chiave primaria della tabella base

Indici XML Secondari:

Gli indici secondari sono stati creati per migliorare leperformance di ricerca; prima di creare un indice secondario,l' utente deve uscire da quello primario. Ecco ledifferenti tipologie di indici secondari:

  • Di percorso: se la query è basata su istruzioni di percorso, sono in grado di velocizzare la ricerca. Sono molto utili in queries che specificano exist() in WHERE.
  • Di valore: se la query è basata su un valore
  • PROPERTY: se la query ricava uno o più valori da un' istanza XML singola; utile nel caso pratico in cui si ricavino le proprietà di un oggetto usando il metodo value() dell' XML e quando dell' oggetto in questione si conosca il valore della chiave primaria.