Tips-Tricks

Verificare l'esistenza di un file

Davide Mauri

Con queste poche dighe di codice è possibile verificare - unicamente mediante T-SQL - l’esistenza o meno di un file:

create table [#cmdoutput]
(
[output] nvarchar(1024)
)
go

insert into [#cmdoutput] ([output])
exec xp_cmdshell ‘dir /b \\tauceti2\c$\autoexec.bat’
go

declare @exists int
select @exists = count(*) from #cmdoutput where [output] is not null
if (@exists > 0) print ‘Exists’ else print ‘Not Exists’
go

drop table [#cmdoutput]
go

Smo: individuare le istanze di SQL Server

Davide Mauri

Esistono molti metodi per ottenere programmaticamente informazioni utili circa le istanze di SQL Server disponibili sia localmente che in rete anche se, in quest’ultimo caso, non tutti garantiscono il corretto funzionamento dal momento che possono entrare in gioco fattori difficilmente prevedibili e arginabili legati solitamente all’infratruttura di security della rete piuttosto che alla configurazione delle varie istanze di SQL Server.
Ad ogni modo, in nostro soccorso corrono le ormai famigerate API conosciute con l’acronimo di Smo (SQL Server Management Objects), che permettono di interagire con versioni di SQL Server dalla 7 in poi.
Il primo passo da effettuare è dunque l’importazione nel nostro progetto del namespace Microsoft.SqlServer.Management.Smo tramite la ‘reference’ alle librerie Microsoft.SqlServer.Smo.dll e Microsoft.SqlServer.ConnectionInfo.dll. A questo punto, un primo metodo percorribile (e facilmente opinabile) permette di enumerare la lista delle istanze (locali e non) registrate in SQL Server Management Studio tramite il metodo EnumRegisteredServers di SmoApplication:

GO ed escuzioni multiple della stessa istruzione

Davide Mauri

Il comando GO che utilizziamo per separare in batch le istruzioni TSQL può essere associato ad un valore numerico.
A cosa server tale valore?
A far eseguire N volte le istruzioni contenute nel batch.

Ovvero scrivendo un’istruzione come:

PRINT ‘ciao’
GO 3

Otteniamo questo risultato:

Beginning execution loop
ciao
ciao
ciao
Batch execution completed 3 times.

La cosa si fa interessante in tutti quegli scenari in cui abbiamo la necessità di popolare alcune tabelle con dati di test o di prova.
Qualcosa del genere: