Trasact-SQL: utilizzare una variabile nella clausola SELECT TOP
Mi sono imbattuto in questa problematica: utilizzare una SELECT TOP all’interno di un ciclo, in cui il numero di record da utilizzare è assegnato ad una variable.
Questo è l’esempio che non funziona:
DECLARE @num INT DECLARE c_curs CURSOR FOR [...] OPEN c_curs FETCH NEXT FROM c_curs INTO @num WHILE @@FETCH_STATUS = 0 BEGIN [...] SELECT TOP @num [...] ORDER BY NEWID() FETCH NEXT FROM c_curs INTO @anno, @num END CLOSE c_curs DEALLOCATE c_curs |
Ho risolto utilizzando ROWCOUNT che è invece parametrico:
SET ROWCOUNT @num SELECT [...] ORDER BY NEWID() SET ROWCOUNT 0 FETCH NEXT FROM c_curs INTO @num |
E’ importante ricordarsi di ripristinare il valore di ROWCOUNT a 0.
Curiosando in rete ho trovato questo articolo che spiega meglio il problema, e offre più di una soluzione: http://sqlserver2000.databases.aspfaq.com/how-do-i-use-a-variable-in-a-top-clause-in-sql-server.html
Leave a Reply