1988 Prima versione Sybase su OS/2
1993 Una prima versione a funzionalità ridotte le funzionalità potevano essere adatte alle esigenze di una società di piccole dimensione, tanto per avere un’idea la vesione “express ” attuale è sicuramente più potente
1995 SqlServer 6.05 una versione “small business”
1996 SqlServer 6.5 La prima vera versione server che si propone come competitor ad Oracle e veniva utilizzata su Windows NT 3.5 - 4, nonostante ciò non è ancora in grado di sopportare i carichi di un db affermato come Oracle
1997 SqlServer 7 La prima versione che guadagna una certa reputazione tra le società e si affaccia ai business di medie dimensioni diventa un vero db server che soppianta quasi completamente le utenze di access per le applicazioni lato server, il motore è stato completamente riscritto per supportare con una certa efficienza le funzionalità batch. Sono stati introdotte le funzionalità OLAP e gli strumenti di analisi
2000 SqlServer 2000 il primo vero database server di livello enterprise.
2005 SqlServer 2005 Una versione in cui gran parte dei servizi Core sono stati riscritti per poter affrontare le nuove esigenze del mercato che utilizzano largamente i web service e inizia “la moda” delle architetture SOA. Inizia il supporto all’integrazione nativa nei linguaggi .NET, benchè il mercato dimostra di non voler sfruttare tale feature
2008 SqlServer 2008 sfrutta i core components di Sql Server 2005 introducendo nuovi tipi di dati e sfruttando al massimo le feature di LINQ, introduce inoltre le regole di definizione dei criteri sugli oggetti e sui database, mediante l’uso di tali regole possono essere sfruttati i warning se tali regole non vengono rispettate.
Con Slq Server 2008 la novità a mio parere più importante è una nuova istruzione che finalmente è stata implementata: MERGE
con l’isruzione MERGE sono stati coperti i seguenti scenari:
Sincronizzazione di due tabelle tramite differenza con sorgente
OLTP INSERT or UPDATE (upsert) - se record esiste update altrimenti insert
Gli use case riguardano essenzialmente tutti gli scenari in cui è presente una realtà di datawarehouse (DWH)
Prima dell’avvento di sqlsererver 2008 le merge erano implementate con tre istruzioni distinte:
Una prima left outer join su due tabelle utilizzando la prima key e confrontando i valori nulli su due distinte colonne
effettuare le insert sul valore null della tabella destinazione
effettuare le update sul valore diverso da null della tabella di destinazione
Istruzione merge:
[WITH
La prima clausola è WHEN MATCHED (source inner join on taget)
la riga esiste sia in source che in target
azioni valide update or delete
WHEN TARGE NOT MATCHED (source left outer join target)
la riga esiste nella tabella sorgente ma NON in target
azione valide INSERT
WHEN SOURCE NOT MATCHED (source right outer join target)
La riga esiste in target ma non in source
azioni valide update or delete
Occorre fare alcune considerazoni di base che considerino le performance operative:
source e target hanno dimensioni simili
indici sulle chiavi di join univoco
indici sulle chiavi di join clustered
internamente sql server eseque comunque delle join laterali
In genere come tutti sanno le join laterali sono operazioni più lente e vanno sempre usate con parsimonia poicheè le performance sui DBMS sono sempre più critiche in queste condizioni.
per poter eseguire correttamente è necessario specificare almeno una clausola MATCHED
Al termine di un operazione con operatore MERGE @@rowcount ritorna il numero di righe che sono state coinvolte nelle operazioni INSERT / UPDATE / DELETE.
Le clausole possono essere specificate in qualsiasi ordine
L’istruzione MERGE esegue tutte le operazioni in un unica transazione implicita
esempio :
MERGE ProductsOnStock AS ps — dest.USING Producs AS pON ps.id = p.id– righe presenti e quantità diverseWHEN MACHED AND (ps.quantity <> p.quantity)THEN UPDATE SET ps.quantity = p.quantity– righe non presenti in dest.WHEN NOT MATCHEDTHEN INSERT (id, desc, quantity) VALUES (p.id, p.desc, p.quantity)WHEN SOURCE NOT MATCHEDTHEN DELETE;GO
L’istruzione merge è davvero potente e i books on line sono molto esaurienti in merito per tutte quelle attività batch che necessitao la sincronizzazioni di dati consente di scrivere del codice molto comprensibile e sintetico e sporattutto è on cìgrado di effetturare un unica transazione su tutti i tipi di operazioni specificate nella merge.

Nessun commento:
Posta un commento