Quando si lavora con SQLServer (dalla versione 2005 in su) è buona norma attivare nel Management Studio l’opzione per autogenerare gli script di aggiornamento. Questo ci permetterà poi di eseguire tali script sul server di produzione per allinearlo con pochi clic agli ultimi nostri sviluppi.
Tuttavia, molto spesso, non abbiamo accesso (per ragioni di sicurezza o di semplice logistica) all’interfaccia del Management Studio del cliente. A questo punto il problema si complica, perchè l’oggetto .NET SQLCommand (dal namespace SQLClient) non permette l’esecuzione degli script autogenerati da MSSE, in quanto essi contengono svariati costrutti non facenti parte dello standard T-SQL.
Molti siti che potete facilmente trovare con Google, suggeriscono di implementare la libereria SMO. Tuttavia ciò comporta di dover star attenti a quale versione di SQLServer viene utilizzata, nonchè il deployment di tale libreria con tutte le relative dipendenze
Per superare tutto ciò possiamo semplicemente richiamare SQLCMD da shell con poche righe di codice:
Dim p1 As New System.Diagnostics.ProcessStartInfo
Dim p3 As System.Diagnostics.Process
p1.FileName = "sqlcmd"
p1.RedirectStandardError = True
p1.RedirectStandardOutput = True
p1.UseShellExecute = False
p1.Arguments = "-d " & [NOME DEL DATABASE] & " -i " & [NOMEFILE.SQL]
p3 = System.Diagnostics.Process.Start(p1)
p3.WaitForExit()
Questo breve snippet di VB.NET si collega a un database sul server locale (connessione integrata, ma è possibile passare anche le credenziali) ed esegue in blocco uno script contenuto in un file .SQL. A questo link la documentazione completa di tale utility. Essa è in ogni caso inclusa con l’installazione di SQLServer, quindi siamo certi della sua presenza.