2009-08-27 23 views
59

estoy convirtiendo SQL de Teradata para SQL ServerSelect de SQL multi-columnas EN múltiples variables

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 enunciado. ¿Cómo asignar 2 o más variables usando una sola instrucción SELECT?

Respuesta

120
SELECT @variable1 = col1, @variable2 = col2 
FROM table1 
+0

¿Hará esto mejorar el rendimiento/velocidad en comparación con múltiples SELECT o es lo mismo? –

+7

La verdadera respuesta es probarlo y verlo usted mismo. La respuesta informal es sí, por supuesto, probablemente. –

30
SELECT @var = col1, 
     @var2 = col2 
FROM Table 

Aquí hay alguna información interesante acerca de SET/SELECT

  • SET es el estándar ANSI para la asignación de variables, no es SELECT.
  • SET solo puede asignar una variable a la vez, SELECT puede realizar varias asignaciones a la vez.
  • Si asigna desde una consulta, SET solo puede asignar un valor escalar. Si la consulta devuelve múltiples valores/filas , SET generará un error. SELECT asignará uno de los valores de la variable y ocultar el hecho de que fueron devueltos múltiples valores (por lo que le probablemente nunca se sabe por qué algo iba mal en otro lugar - diviertas solución de problemas que uno)
  • Cuando la asignación de una consulta si no hay valor devuelto luego SET NULL asignar, donde SELECT no realizar la asignación en absoluto (por lo que la variable no se cambiará desde su valor anterior)
  • en cuanto a las diferencias de velocidad - no hay diferencias directas entre SET y SELECCIONAR. Sin embargo, la capacidad de SELECT para realizar asignaciones múltiples en una toma le da una ligera ventaja ventaja sobre SET.
Cuestiones relacionadas