In SQL Server 2000 e 2005 per limitare il numero di righe restituita da un query ad una certa quantità predefinita si utilizza la clausola SELECT TOP n.
Un vecchio (e non standard) modo per fare le stessa cosa è quello di utilizzare, prima della query, l'opzione SET ROWCOUNT n che, come la SELECT TOP n, limita il numero di righe restituita dalla query eseguita dopo tale comando ad esattamente "n" righe.
Qualsiasi esperto e qualsiasi libro consiglierà sempre di utilizzare la SELECT TOP in quanto, rispetto alla SET ROWCOUNT è più ottimizzata e, soprattutto, standard. Bene, il fatto che sia standard è vero, ma che sia anche più veloce no ....anzi, in alcuni casi è oltre 10 (!!!) volte più veloce!
Al SQLPASS ho potuto parlare con il Project Lead dell'optimizer e, incredulo, mi ha chiesto di dargli uno script di prova per poter replicare il problema. Detto fatto, siamo rimasti in contatto via mail e dopo solo 10 giorni il problema è stato identificato a confermato come baco. Mi è stato detto che il baco rimarrà nella RTM di SQL 2005 ma verrà sistemato con il primo Service Pack, quindi state all'erta, e se volete più informazioni sul problema rivolgete i vostri browser qui.
Sono davvero contento della cosa, sia per la "soddisfazione" di aver dato una piccola mano nel migliorare il motore di SQL Server 2005, sia per la disponibiltà che il team di sviluppo mi ha dimostrato e la celerità con la quale è stato rilevato il problema.
Devo davvero fare i complimenti a Microsoft per la grande cura che presta alle richieste ed ai rapporti con gli sviluppatori. Ottimo lavoro!