2009-01-22 11 views
33

È possibile aggiornare più di una variabile locale in una singola selezione?T-SQL, aggiornando più di una variabile in una singola selezione

Qualcosa di simile:

set 
    @variableOne = avg(someColumn), 
    @variableTwo = avg(otherColumn) 
    from tblTable 

Sembra un po 'uno spreco di fare due operazioni di selezione separati per qualcosa di così banale come questo compito:

set @variableOne = (select avg(someColumn) from tblTable) 
set @variableTwo = (select avg(otherColumn) from tblTable) 

risposta

78

Qualcosa di simile a questo:

select @var1 = avg(someColumn), @var2 = avg(otherColumn) 
from theTable 
+0

Perfetto, grazie! – jandersson

1

circa

SELECT @variableOne = avg(someColumn), @variableTwo = avg(otherColumn) from tblTable 

funziona per me bene.

9

È possibile utilizzare l'assegnazione SELECT per assegnare più variabili. Questo codice genera una singola riga di costanti e assegna ciascuna a una variabile.

SELECT 
    @var1 = 1, 
    @var2 = 'Zeus' 

Potete persino tabelle di query e di fare l'assegnazione in questo modo:

SELECT 
    @var1 = c.Column1, 
    @var2 = c.Column2, 
FROM 
    Customers c 
WHERE c.CustomerID = @CustomerID 

Attenzione: Questo codice funziona come un ciclo while.

  • Se ci sono più righe, ogni riga verrà assegnata alle variabili e l'ultima riga sarà quella lasciata lì. Se non hai specificato un ordine, hai rinunciato al controllo su quale riga sarà l'ultima riga.
  • Se non ci sono righe, le variabili non verranno assegnate affatto. Le variabili non saranno impostate su null - rimarranno invariate. Questo è un problema chiave se l'assegnazione viene eseguita in un ciclo (in genere risultante in un ciclo infinito in quanto le variabili non cambiano mai).

Preferire utilizzando l'assegnazione SET sull'assegnazione SELECT. Utilizzare solo l'assegnazione SELEZIONA quando si considerano entrambi gli scenari sopra.

Problemi correlati