2009-01-22 11 views
33

¿Es posible actualizar más de una variable local en una sola selección?T-SQL, actualizando más de una variable en una sola selección

Algo así como:

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

Me parece un poco desperdicio para hacer dos operaciones de selección separados por algo tan trivial como esta tarea:

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

Respuesta

78

Algo como esto:

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

Perfecto, gracias! – jandersson

1

cómo sobre

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

me funciona muy bien.

9

Puede usar la asignación SELECCIONAR para asignar múltiples variables. Este código genera una sola fila de constantes y asigna cada una a una variable.

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

Puede incluso tablas de consultas y la asignación de tarea de esa manera:

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

Cuidado: Este código funciona como un bucle while.

  • Si hay varias filas, cada fila se asignará a las variables y la última fila quedará allí. Si no especificó un pedido, renunció al control sobre qué fila será la última fila.
  • Si no hay filas, las variables no se asignarán en absoluto. Las variables no se establecerán en nulo; permanecerán sin cambios. Este es un problema clave si la asignación se realiza en un bucle (normalmente resulta en un bucle infinito ya que las variables nunca cambian).

Prefiere usar la asignación de SET sobre la asignación SELECT. Solo use la asignación SELECCIONAR cuando considere los dos escenarios anteriores.

Cuestiones relacionadas