Righe casuali in SQL Server 2000

Ordinare le righe di una tabella di Sql Server in modo casuale, cioè con ordinamento variabile di volta in volta, non è certamente una operazione di ogni giorno e, a prima vista, può anche sembrare una operazione complessa. In realtà è abbastanza semplice se ci si affida alla funzione NEWID() che ritorna un GUID univoco in assoluto; pertanto la seguente query:

T-SQL

select * from orders order by newid()

restituirà un resultset ordinato ogni volta in modo differente.

Basandoci su questo esempio è anche possibile estrarre una riga diversa ogni volta che si esegue lo statement:

T-SQL

select top 1 * from orders order by newid()

Quest’ultima istruzione andrebbe usata però con cautela su tabelle di grandi dimensioni, in quanto prima di restituire  la riga casuale l’engine SQL legge tutte le righe della tabella, per ognuna di esse calcola il GUID, ed infine ordina le stesse, come si evince dando uno sguardo al piano di esecuzione.

Manipolare i campi identity in T-SQL

Spesso può essere utile verificare il valore identity associato ad una colonna di una tabella di database ed eventualmente modificarlo, impostandolo chiaramente ad un valore almeno uguale al valore più alto del campo. Questa operazione è  utile soprattutto quando si popola una tabella con un campo di questo tipo con informazioni di test, che successivamente sono eliminate, ed è quindi utile azzerare il valore identity per farlo ripartire da 1.

Il comando T-SQL per manipolare il campo identity è DBCC CHECKIDENT.

Alcuni esempi:

T-SQL

-- visualizza il valore corrente del campo identity di <nome tabella
DBCC CHECKIDENT (<nome tabella>, NORESEED)  
  
-- verifica il valore corrente del campo identity di <nome tabella> e, 
-- se errato, lo corregge
DBCC CHECKIDENT (<nome tabella>) 
  
-- imposta a 50 il valore corrente del campo identity di <nome tabella>
DBCC CHECKIDENT (<nome tabella>, RESEED, 50) 

Accedere al registro di Windows utilizzando T-SQL

Sql Server prevede una serie di stored procedure di sistema per svolgere funzioni di amministrazione del server, gestione della posta elettronica, esecuzione di comandi di sistema, etc., alcune delle quali anche non documentate, e che possono tornare utili in diverse occasioni. Poichè si tratta di una applicazione basata su COM utilizza il registro di sistema per memorizzare informazioni vitali per il suo funzionamento. Attraverso una store procedure non documentata chiamata xp_regread è possibile leggere il valore di una qualsiasi chiave di registro, utilizzando il tal modo solo codice T-SQL. Lo script seguente legge il contenuto della chiave utilizzata da Sql Server per memorizzare il percorso fisico di installazione.

T-SQL

declare @sqlpath varchar(200)
exec master..xp_regread @root='HKEY_LOCAL_MACHINE', 
     @key='SOFTWARE\MICROSOFT\MICROSOFT SQL SERVER\80\TOOLS\CLIENTSETUP', 
     @value_name='SqlPath', @value=@sqlpath OUT 

Il parametro di output @value conterrà il contenuto della chiave chiamata SqlPath situata nel percorso ‘SOFTWARE\MICROSOFT\MICROSOFT SQL SERVER\80\TOOLS\CLIENTSETUP’

T-SQL

print @sqlpath