SQL SELECT multi-colonne INTO multi-variabile


86

Sto convertendo SQL da Teradata a SQL Server

in Teradata, hanno il formato

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

In SQL Server, ho trovato

SET @variable1 = (
SELECT col1 
FROM table1
);

Ciò consente solo una singola colonna / variabile per istruzione. Come assegnare 2 o più variabili utilizzando una singola istruzione SELECT?

Risposte:


173
SELECT @variable1 = col1, @variable2 = col2
FROM table1

Ciò migliorerà le prestazioni / velocità rispetto a più SELECT o è lo stesso?
Shankar Nathan

8
La vera risposta è provarlo e vedere di persona. La risposta informale è sì, ovviamente, probabilmente.
underscore_d

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

Ecco alcune informazioni interessanti su SET / SELECT

  • SET è lo standard ANSI per l'assegnazione delle variabili, SELECT non lo è.
  • SET può assegnare solo una variabile alla volta, SELECT può eseguire più assegnazioni contemporaneamente.
  • Se si assegna da una query, SET può assegnare solo un valore scalare. Se la query restituisce più valori / righe, SET genererà un errore. SELEZIONA assegnerà uno dei valori alla variabile e nasconderà il fatto che sono stati restituiti più valori (quindi probabilmente non saprai mai perché qualcosa stava andando storto altrove - divertiti a risolverlo)
  • Quando si assegna da una query se non viene restituito alcun valore, SET assegnerà NULL, dove SELECT non eseguirà affatto l'assegnazione (quindi la variabile non verrà modificata dal valore precedente)
  • Per quanto riguarda le differenze di velocità, non ci sono differenze dirette tra SET e SELECT. Tuttavia, la capacità di SELECT di eseguire più assegnazioni in un solo colpo gli conferisce un leggero vantaggio di velocità rispetto a SET.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.