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:
- Indici XML Primari;
- 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:
- il nome della TAG
- il valore del nodo
- la tipologia del nodo
- informazioni in riguardo all' ordine del documento
- il percorso che va da ciascun nodo alla root dell' XML
- 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.