SQL Conference 2012: gentlemen, start your engines!

La SQL Conference 2012 è ormai alle porte, e finalmente aggiungerei!

Come una donna bella e smaliziata, sa farsi attendere, ma sa anche ricompensare pienamente l'attesa.

La formula scelta dagli organizzatori quest'anno è molto particolare, e la novità principale è senza dubbio tutta una serie di sessioni parallele alle 2 track canoniche.

Cosa aspettarsi da queste sessioni? In breve, si tratterà di un contatto "ravvicinato" con gli esperti del settore che permetterà, oltre che picchiarli se non vi è piaciuta la loro sessione (tanto io sono l'ultimo...:D), di intavolare piacevoli discussioni sugli argomenti tecnici più disparati, in un ambiente meno formale e più "intimo" (si svolgeranno infatti volutamente in aule dalla capienza più ristretta) della classica sessione one-way (in cui lo speaker parla, il pubblico...si appisola).

Credo che rimandarvi all'agenda sia effettivamente la cosa migliore da fare, anche perchè le sessioni, suddivise in diverse tipologie, sono ben 20 e c'è solo l'imbarazzo della scelta. Ecco il link: http://www.sqlconference.it/events/2012/sessions.aspx#a

Le due main-track parallele, dal canto loro, sono oltremodo ricche, grantendo una copertura di tutte le novità offerte da SQL Server 2012 con ampie sessioni dal taglio tecnico ed approfondito. A questo link è possibile valutare nel dettaglio il proprio percorso formativo grazie anche ai comodi filtri presenti nella colonna di destra. Quest'anno la faranno da padrone le novità nel campo BI (sia Self-service, grazie a PowerPivot e xVelocity/VertiPaq, che Enterprise) e l'importanza del mondo Cloud grazie all'integrazione, estesa notevolmente in questa versione, con l'ormai diffusissimo Azure.

Per quanto riguarda me, invece, terrò la sessione sugli Spatial Data Type. Le novità, anche in questo caso, sono davvero succose. Dato che le slide sono già pronte (record assoluto personale, ho ancora il magone) posso anticiparvi che sarà una sessione più pratica che teorica. Ho scelto questa strada perchè toccare con mano elementi geometrici e geografici lascia quella piacevole sensazione di "evadere" dal canonico data storage, e fa apprezzare ancora di più l'integrazione che questi tipi di dati (così diversi da quelli che siamo abituati a trattare) hanno ad oggi con l'engine di SQL Server e con le soluzioni ad esso legate, Reporting Services su tutti.

La diffusione sempre più ampia di dispositivi portatili e di "app" geo-enabled (termine coniato in questo momento, credo...no come non detto, più di 18.000.000 di risultati su Google) sta rendendo fondamentale poter legare le potenzialità ed i servizi di un RDBMS a dati di localizzazione ed effettuare ricerche rapide e precise su di essi. SQL Server si fa trovare pronto e fornisce una risposta concreta out-of-the-box, garantendo inoltre una rappresentazione grafica dei dati geospaziali davvero rapida ed intuitiva grazie al Map Control di Reporting Services e l'integrazione con Bing Maps.

Se siete ancora nel dubbio se esserci o meno, vi ricordo che ad oggi sono disponibili meno di 15 posti. Che dire, affrettatevi!

Vi aspettiamo quindi tra meno di una settimana in quel di Peschiera, sono convinto che saranno per tutti due giorni intensi e fantastici!

Welcome SQL Server 2012

Mi accodo a Davide e Andrea nell'annunciare che è finalmente disponibile la RTM di SQL Server 2012, come si può evincere da questo post sul blog ufficiale.

E' già possibile scaricare una Evaluation valida per 6 mesi. Per scaricarla andate qui.

La release per il grande pubblico è fissata invece per il primo aprile (...evito battute scontate... :D).

Ricordo inoltre che oggi 7 marzo va in onda il Virtual Launch, con una ricca agenda di sessioni da non perdere. Per assistere occorre semplicemente registrarsi a questo indirizzo.

Buona visione!

ISNULL strikes back!

String.Format("A quanto pare non sono l'unico {0} ad essere incappato nel problema...", insultoACaso); Smile

http://www.sqlservercentral.com/articles/T-SQL/76861/

Passing XML-based parameters lists

A volte (si spera poche volte) capita di dover passare da applicativo liste di parametri a stored procedures o function.

SQL Server 2008 ha fornito una possibile soluzione introducendo i Table valued parameters che, seppur a mio avviso un po' macchinosi, sono una valida alternativa "strutturata" alla sempre ottima split di Jeff Moden (un'esperienza di vita più che un articolo Big Smile consiglio la lettura).

Mi ero chiesto, tempo fa, se i campi XML potevano rappresentare un'altra strada percorribile, ma da più parti avevo letto pareri negativi riguardo alle performance.

Phil Factor ha pubblicato su simple-talk un articolo che affronta questa possibilità, fornendo una soluzione, tratta da un libro di Bob Beauchamin, che si basa sull'utilizzo degli attributi dei nodi XML per salvare i valori degli elementi della lista, invece che utilizzarne i valori. I risultati sono sorprendenti, e le performance sono paragonabili alla soluzione di Jeff Moden.

Direi che non ci si può lamentare, c'è solo l'imbarazzo della scelta! Smile

SQL Server 2008R2: Server Audit vs SQL Trace performance

Una delle domande che mi è stata posta al workshop Road to Denali di gennaio riguardava l'impatto delle funzionalità di audit sulle performance.

Linchi Shea ha postato su SqlBlog i risultati di un'interessante comparazione tra Audit e SQL Trace, ecco il link:

http://sqlblog.com/blogs/linchi_shea/archive/2012/01/24/performance-impact-sql2008-r2-audit-and-trace.aspx

Buona lettura!

SQL Conference 2012: iscrizioni aperte!

Torna uno degli appuntamenti più importanti in Italia per chi gravita nell'universo SQL Server!

Puntate orologi a cucù e sveglie per il 28-29 marzo, e i navigatori verso il Microsoft Innovation Campus di Milano. Quello di quest'anno sarà un'evento molto particolare, in quanto nei primi mesi del 2012 sarà rilasciata la nuova versione di SQL Server. Inutile dire che SQL Server 2012 sarà il protagonista della conference di quest'anno, e si avrà modo di approfondire tutte le novità che porterà con sé e di cui UGISS sta proponendo un assaggio nei workshop Road To Denali.

Amministrazione, sviluppo, business intelligence sono solo alcuni degli argomenti che verranno trattati nella ricca serie di sessioni dedicate al mondo del RDBMS più amato dagli italiani (semi cit.). Collaterali alle due track parallele, infatti, sono state pensate tutta una serie di attività quali lab, mini-sessioni, focus group, e altri formati che verranno definiti nel prossimo mese. Da non dimenticare, poi, la SQL Clinic: gli specialisti italiani del Microsoft Customer Service and Support (CSS) saranno a vostra disposizione per rimettere in sesto il vostro DB!

Per quanto mi riguarda, sembra passato un secolo dal maggio scorso: guardavo l'agenda della SQL Conference 2011, che avevo saltato, e mi ripromettevo che non avrei perso anche l'appuntamento del 2012. Mai e poi mai, però, avrei pensato che sarei stato nella line-up degli speaker (in effetti non avendo mai relazionato in pubblico fino a quel momento come avrei potuto pensarlo...come si dice, mai dire mai! Smile). Voglio quindi ringraziare (nuovamente) gli organizzatori della conference per avermi dato questa opportunità, esserci è davvero un onore.

BTW, terrò la sessione GeoSpatial Solutions with SQL Server 2012 in cui mostrerò, dopo un breve "recap", le novità introdotte nell'ambito dei data type geospaziali. Centra anche la metropolitana milanese, ma questa è un'altra storia Stick out tongue

Non mi resta che indicare il link al sito ufficiale della conference e ricordare che i posti sono limitati. Affettatevi!

ISNULL reminder

Per quanto sia un assiduo frequentatore dei BOL, a volte mi capita di dimenticare alcuni dettagli. Altre volte, ed è anche peggio, mi capita di ricordare i dettagli ma di sottovalutarne alcune implicazioni.

Un caso emblematico è capitato proprio oggi, e riguarda l'uso della funzione ISNULL di SQL Server.

Prima di tutto, la sintassi:

ISNULL ( check_expression , replacement_value )

Ricordo che la funzione ISNULL, rispetto alla COALESCE, ha un valore di output il cui tipo è determinato ed è quello di check_expression. Questo significa che replacement_value deve essere dello stesso tipo check_expression, o quantomeno implicitamente convertibile in esso, in quanto se check_expression è NULL viene restitutito replacement_value, opportunamente convertito se necessario. Fin qua tutto ok.

Non avevo però mai considerato il seguente caso:

DECLARE @val1 nvarchar(4) = NULL;

SELECT
    ISNULL(@val1, N'ciao a tutti') AS [ISNULL],
    COALESCE(@val1, N'ciao a tutti') AS [COALESCE];

Eseguendo questa semplice query, il risultato è il seguente:

Ora, a parte l'esempio molto banale e dal risultato (facilmente) prevedibile alla luce di quanto scritto nei BOL, può capitare che il primo parametro della ISNULL - check_expression - sia un'espressione di cui non è immediato vedere a colpo d'occhio il tipo restituito, oppure che nella fretta di alcune modifiche possa sfuggire il fatto che check_expression abbia un tipo più piccolo di replacement_value (come è successo a me), causando quindi un display errato dei dati (o, peggio, una perdita di dati).

Beh, #dorainpoimeloricordero Smile

La prima (e la seconda) volta

Di ritorno dalla prima (doppia) tappa del Road to Denali, che per me è anche coincisa con le prime due volte da speaker.

Che dire...esperienza indimenticabile da tutti i punti di vista Smile

Dal mio punto di vista un po' (troppo) titubante la presentazione di Milano, un po' (meno) titubante quella di Roma, ma d'altra parte non si nasce imparati e sono esperienze che servono per farsi le ossa. Oltretutto salire per la prima volta su un palco subito dopo interventi di Davide Mauri e Gianluca Hotz, che ormai vanno talmente fluidi nell'esposizione che non li abbatti neanche a cannonate, devo ammettere che mi lasciava un po' nervosetto...a saperlo prima avrei portato un po' di abbacchio con patate al forno, magari almeno Gianluca sarebbe stato un po' meno brillante! Wink

Dal punto di vista delle sessioni direi tutto molto interessante, spero lo sia stato anche per il pubblico presente (che colgo l'occasione per ringraziare). Il tempo disponibile era quello che era, ma direi che le varie funzionalità oggetto del workshop sono state spulciate per benino, anche con qualche excursus a più ampio raggio come l'interessante "storia dell'exception" portata da Gianluca.

Mi ha fatto piacere incontrare di persona Davide, Gianluca, Danilo (Lissoni) & Danilo (Dominici), con i quali ho potuto passare un po' di tempo e devo dire tutti "uomini community" per definizione, e persone molto disponibili.

Un saluto anche a Luca che "si è fatto riconoscere" Big Smile

Bene, penso di aver detto tutto...ah no, un'ultima cosa: ho apprezzato in particolare come la diatriba (penso storica) tra Davide e Gianluca su chi fosse andato lungo con i tempi si sia risolta con un politico "colpa dei coffee break", questa è alta strategia di marketing! ... Scherzo, ovviamente Big Smile

Alla prossima tappa!

SSIS, Text Qualifier e _x0022_

L'altro giorno ho dovuto fare un update ad un pacchetto SSIS che esporta alcuni dati su una Flat File Destination. Compilo, deploy sul server di test, testo, tutto ok. Pubblico in produzione, faccio i test, controllo il CSV e noto con piacere che tutti i doppi apici usati come text qualifier sono diventati il carattere _X0022_, che è stata anche la mia esclamazione quando ho visto quello che era successo (censurata, ovviamente).

Dopo un paio di ricerche nella biblioteca della mia città (no, ok, ho usato Google) sono capitato su questo post di Jamie Thomson che ha svelato l'arcano: la versione di SQL Server in produzione era in effetti un po' in carenza di affetto e di aggiornamenti, mentre quella che usavo io in sviluppo e test era aggiornata. Purtroppo non ho accesso diretto agli update di quel server, quindi quando pubblico qualcosa devo sempre stare attento alle discrepanze di versione, oltre che sollecitare eventuali aggiornamenti rimasti indietro per evitare appunto stranezze come questa (in effetti ricordo che tempo fa il sistemista mi disse che avrebbe aggiornato quella macchina subito dopo il mio aggiornamento del server di test, ma evidentemente non è andata così).

In ogni caso, altra lezione ripassata: verificare sempre l'allineamento delle versioni di sviluppo/test/produzione!

Eventi community Road to Denali

Manca ormai poco più di un mese all'inizio della serie di eventi gratuiti "Road to Denali", un'occasione ghiottissima per spulciare in 6 differenti workshops di mezza giornata ciascuno, replicati sia a Milano che a Roma per un totale di 12 incontri, le novità che l'uscita di SQL Server Denali porterà con sè.

SQL Server Denali (ormai dopo il PASS 2011 ufficializzato in SQL Server 2012...ma il titolo "Road to 2012" non si potrebbe sentire Big Smile) introduce importantissime novità in tutti i settori, dall'estensione del linguaggio TSQL ai rinnovati tools di management e sviluppo, dalle nuove funzionalità per amministrazione ed availability alle migliorie nel campo della Business Intelligence.
Citando il buon Davide: "Le novità introdotte, a tutti i livelli, dall’amministrazione alla Business Intelligence, sono cosi tante e cosi importanti da rendere questa versione di SQL Server una vera e propria pietra miliarie, cosi come accadde per SQL Server 2005".

UGISS vi accompagnerà passo passo alla scoperta del (quasi) nuovo nato in casa Microsoft attraverso i mesi che ci separano dalla sua uscita. Il calendario completo dei workshops, oltre ai link per registrarsi ai primi due eventi, lo trovate qui.

Io avrò il piacere (e l'onore) di dividere il palco della data del 21 novembre a Milano con Davide e Gianluca, due "mostri sacri" del campo. Un grazie quindi a Davide per la fiducia accordatami Smile, essendo questo il mio primo speaking cercherò di fare del mio meglio. Eventualmente, se le cose dovessero mettersi male, terrò pronte dietro la porta un paio di danzatrici del ventre come backup Big Smile.

 

RedGate SQL Search e il limite dei 150 risultati

Come penso molti di voi sono un assiduo utilizzatore dei tool di RedGate, e tra gli altri ho installato anche SQL Search.

Ho scoperto oggi, in una ricerca su oltre 3000 stored procedures, che il limite di risultati di SQL Search è fissato a 150. Da una rapida ricerca sul forum di RedGate quella di non mettere opzioni configurabili appare proprio come scelta di design, come da risposta di uno degli sviluppatori.

Non è effettivamente un grosso problema se non che, da come è scritto sulla maschera, non è evidentissimo che il limite sia questo (viene infatti specificato semplicemente: "150 results") e inizialmente sono stato tratto in inganno. Ho perso una decina di minuti cercando di capire come mai un risultato atteso non mi comparisse tra quelli elencati, salvo poi essere insospettito dal numero di risultati "tondi" di SQL Search. E i numeri tondi, si sa, sono un cattivo presagio Big Smile

Onestamente non ho trovato un punto chiaro dove questo limite sia scritto, quindi magari non sono (ero) l'unico a non esserne a conoscenza. Sappiatelo Smile

SSMS, smettila di indicizzare! è maleducazione!

A mio avviso una delle feature migliori introdotte con SQL Server 2005 sono state le Indexed Views.

Se usate correttamente (e con parsimonia) possono portare grandi benefici alle query, abbassando notevolmente i tempi di esecuzione e l'impatto su disco e CPU.

Nel caso vi capiti di usarle è però bene ricordarsi una cosa, se state utilizzando SSMS 2005/2008/2008R2: se anche portate a true l'opzione "Script indexes" in Tools -> Options -> SQL Server Object Explorer -> Scripting

 

e successivamente, da object explorer, lanciate il comando da menu contestuale ALTER (o anche CREATE, o DROP and CREATE, è indifferente) sulla vista indicizzata da modificare quello che otterrete è esclusivamente il corpo della vista, ma non i suoi indici. E' bene notare che nel caso si faccia la stessa cosa con una tabella gli indici saranno correttamente presenti.

Ovviamente, nel caso di un ALTER fatto velocemente e distrattamente vengono distrutti in un colpo solo tutti gli indici della vista senza alcun avviso o messaggio d'errore, in quanto il comando ALTER VIEW per prima cosa elimina gli eventuali indici presenti e successivamente aggiorna il text della vista.

L'alternativa in questo caso è utilizzare la task "Generate scripts" dal menu contestuale del database che contiene la vista

 

e selezionarla per la generazione script. Lo script così generato conterrà anche gli indici, e si potra tranquillamente utilizzare quello per le modifiche da effettuare.

La mamma lo dice sempre che indicizzare è maleducazione, ma SSMS mi sembra un po' troppo un bravo bambino, a volte Big Smile

Nota: SSMS incluso nella CTP3 di Denali non presenta più questo problema, bene!

SSMS e la leggenda del rinomina perduto

Ogni tanto mi stupisco dei titoli ignoranti che riesco a forgiare...

In ogni caso, volevo solo ricordare con un breve appunto il rischio che si corre rinominando gli oggetti del db direttamente dall'object explorer di Management Studio.

Supponiamo di avere la nostra stored procedure, award winning per fantasia, dbo.stp_test.

Per accedere alla sua definizione ci basta utilizzare, avendo i permessi di farlo, la funzione di sistema OBJECT_DEFINITION:

SELECT OBJECT_DEFINITION(OBJECT_ID('dbo.stp_test')) AS ObjectDef

Altre due alternative per ottenere la definizione di un oggetto sono la SP sp_helptext e la VIEW sys.sql_modules.

Eseguendo la query otteniamo il seguente risultato, che è il testo dello script utilizzato per creare l'SP:

Ora, in un lampo di normalità, ci accorgiamo che il nome di questa stp non è del tutto chiaro e decidiamo di cambiarlo in qualcosa di più utile e comprensibile, ma per farlo utilizziamo direttamente l'object explorer di Management Studio:

Se ora rieseguiamo la query di poco fa, opportunamente modificata

SELECT OBJECT_DEFINITION(OBJECT_ID('dbo.stp_testuggine')) AS ObjectDef

otteniamo, con sommo gaudio, ancora il medesimo risultato di prima:

 

La definizione del nostro oggetto, se il suo nome viene modificato dal TreeView di SSMS, rimane immutata. Se dovessimo aver fatto un rename da interfaccia, tuttavia, basta andare in modifica della SP e rieseguirla anche senza effettuare alcun cambiamento in essa. L'operazione di ALTER PROCEDURE fa sì che la definizione della nostra SP venga aggiornata correttamente.

Per ovviare a questo incoveniente, dovendo rinominare, ad esempio, una SP come in questo caso, la scelta migliore sarebbe quella di eseguire un DROP dell'oggetto seguito da un CREATE dello stesso, operazione che SSMS 2008 propone direttamente da menu contestuale (non ricordo in questo momento se anche il 2005 ha questa voce di menu - Igor mi conferma che nel 2005 non era presente, grazie!):

 

Una nota, in chiusura.

Nella maggior parte dei casi questo disallineamento non causa problemi, ed è del tutto trasparente all'operatività normale. Il nome dell'oggetto viene correttamente aggiornato, e l'esecuzione della SP, utilizzando il nome nuovo, riesce senza alcun tipo di problema. Alla prima modifica tutto si riallinea e non ci si accorge di nulla.

Alcuni problemi, invece, possono insorgere in particolari casi in cui un qualche tipo di procedura accede direttamente a questa definizione. Un caso concreto che mi sono trovato davanti è stato quello di una nostra applicazione .NET che tramite una SP recuperava un'elenco delle definizioni degli oggetti, ne calcolava l'albero delle dipendenze (tramite la VIEW sys.sql_dependencies - ormai obsoleta, sostituita da sys.sql_expression_dependencies) e creava uno script di pubblicazione. In SQL 2005 infatti, su DB con una grossa mole di oggetti, il tempo di generazione script era paurosamente elevato se paragonato a quello di SQL 2000, ed avevamo optato per una soluzione fatta in casa che in pochi secondi creasse tale script. Seppure fosse prassi il DROP&CREATE per rinominare gli oggetti ove necessario, un paio di SP erano state rinominate da Object Explorer e ovviamente, quando lo script le aveva ricreate sul DB di destinazione, i nomi delle due SP erano rimasti quelli vecchi e non quelli nuovi, creando un disallineamento ed un fastidioso bug. Scoperto il problema, avevamo provveduto, per ogni evenienza, a creare una SP di verifica che ci elencasse tutti gli oggetti il cui name non fosse contenuto nella sua definition. Brutale e funzionale.

Per la cronaca: la procedura di pubblicazione è stata ormai sostituita da un più completo e funzionale SQL Compare di RedGate :D


Un utilizzo del CONTEXT_INFO

Ho pubblicato un articolo che descrive come abbiamo utilizzato il CONTEXT_INFO di SQL Server in un progetto che stiamo sviluppando. Lo trovate a questo link.

Colgo l'occasione, essendo questo il mio primo articolo, per ringraziare Davide e Sergio per il caloroso benvenuto, e più in generale tutta la community di UgiSS per il contributo costante al mondo IT. Smile