Gestire documenti XML (Parte II)

Questo articolo parla di come gestire i documenti XML con MS SQL Server 2005, potete leggere la prima parte qui

La funzione Eventdata

La funzione Eventdata restituisce le informazioni in riguardo al server o agli eventi del database, ponendole in una variabile di tipo XML. L' XML Schema include informazioni in 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 nuove tabelle nel database. La richiesta Transact-SQL, che da il via all' operazione, viene catturata usando XQuery nei confronti dei dati XML generati dall' Eventdata.

USE AdventureWorks;
GO
CREATE TRIGGER safety
ON DATABASE
FOR CREATE_TABLE
AS
PRINT '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 safety
ON DATABASE
GO

Indici XML

Per recuperare rapidamente i dati in formato XML possiamo ricorrere agli indici, da associare alle colonne con le quali andremo a lavorare. Gli indici XML si suddividono in:

  1. Indici XML Primari;
  2. Indici XML Secondari

Il primo indice della colonna dave obbligatoriamente essere l' indice primario; in tal modo verranno supportati le seguenti tipologie di indici secondari: PATH, VALUE e PROPERTY che possono migliorare le prestazioni delle singole query.

Indici XML Primari:

L' indice primario è una rappresentazione dell' XML BLOBs (binary large object)  nella colonna 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 le performance di ricerca; prima di creare un indice secondario, l' utente deve uscire da quello primario. Ecco le differenti 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.



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Graziano
Hai qualche domanda da fare?