SQL SELECT multi-colunas INTO multi-variable

86

Estou convertendo SQL de Teradata para SQL Server

no Teradata, eles têm o formato

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

No SQL Server, encontrei

SET @variable1 = (
SELECT col1 
FROM table1
);

Isso permite apenas uma única coluna / variável por instrução. Como atribuir 2 ou mais variáveis ​​usando uma única instrução SELECT?

ala
fonte

Respostas:

173
SELECT @variable1 = col1, @variable2 = col2
FROM table1
David M
fonte
Isso melhorará o desempenho / velocidade em comparação com vários SELECTs ou é o mesmo?
Shankar Nathan
8
A verdadeira resposta é testá-lo e ver por si mesmo. A resposta informal é sim, claro, provavelmente.
underscore_d
35
SELECT @var = col1,
       @var2 = col2
FROM   Table

Aqui estão algumas informações interessantes sobre SET / SELECT

  • SET é o padrão ANSI para atribuição de variáveis, mas SELECT não é.
  • SET só pode atribuir uma variável por vez, SELECT pode fazer várias atribuições de uma vez.
  • Se estiver atribuindo a partir de uma consulta, SET só pode atribuir um valor escalar. Se a consulta retornar vários valores / linhas, SET gerará um erro. SELECT atribuirá um dos valores à variável e ocultará o fato de que vários valores foram retornados (então você provavelmente nunca saberá por que algo estava errado em outro lugar - divirta-se solucionando esse problema)
  • Ao atribuir a partir de uma consulta, se não houver nenhum valor retornado, SET atribuirá NULL, onde SELECT não fará a atribuição de forma alguma (então a variável não será alterada de seu valor anterior)
  • Quanto às diferenças de velocidade - não há diferenças diretas entre SET e SELECT. No entanto, a capacidade do SELECT de fazer várias atribuições de uma vez dá a ele uma ligeira vantagem de velocidade sobre SET.
Svetlozar Angelov
fonte