SQL SELECT multi-columnas en multi-variable

85

Estoy convirtiendo SQL de Teradata a SQL Server

en Teradata, tienen el formato

SELECT col1, col2
FROM table1
INTO @variable1, @variable2

En SQL Server, encontré

SET @variable1 = (
SELECT col1 
FROM table1
);

Eso solo permite una sola columna / variable por declaración. ¿Cómo asignar 2 o más variables usando una sola instrucción SELECT?

ala
fuente

Respuestas:

168
SELECT @variable1 = col1, @variable2 = col2
FROM table1
David M
fuente
¿Hacer esto mejorará el rendimiento / la velocidad en comparación con varios SELECT o es lo mismo?
Shankar Nathan
8
La verdadera respuesta es probarlo y comprobarlo por sí mismo. La respuesta informal es sí, por supuesto, probablemente.
underscore_d
35
SELECT @var = col1,
       @var2 = col2
FROM   Table

Aquí hay información interesante sobre SET / SELECT

  • SET es el estándar ANSI para la asignación de variables, SELECT no lo es.
  • SET solo puede asignar una variable a la vez, SELECT puede hacer múltiples asignaciones a la vez.
  • Si asigna desde una consulta, SET solo puede asignar un valor escalar. Si la consulta devuelve varios valores / filas, SET generará un error. SELECT asignará uno de los valores a la variable y ocultará el hecho de que se devolvieron varios valores (por lo que probablemente nunca sabrá por qué algo iba mal en otro lugar; diviértase resolviendo ese problema)
  • Al asignar desde una consulta si no se devuelve ningún valor, SET asignará NULL, donde SELECT no hará la asignación en absoluto (por lo que la variable no cambiará de su valor anterior)
  • En cuanto a las diferencias de velocidad, no hay diferencias directas entre SET y SELECT. Sin embargo, la capacidad de SELECT para realizar múltiples asignaciones en una sola toma le da una ligera ventaja de velocidad sobre SET.
Svetlozar Angelov
fuente