2009-08-27 8 views
59

sto convertendo SQL da Teradata a SQL ServerSQL SELECT multi-colonne in multi-variabile

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 usando una singola istruzione SELECT?

risposta

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

Lo farà migliorare le prestazioni/velocità rispetto a più SELECT o è lo stesso? –

+7

La vera risposta è testarlo e vedere di persona. La risposta informale è sì, certo, probabilmente. –

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

Ecco alcune interessanti informazioni SET/SELECT

  • SET è lo standard ANSI per l'assegnazione variabili, SELECT non è.
  • SET può assegnare solo una variabile alla volta, SELECT può effettuare più assegnazioni in una volta.
  • Se si assegna da una query, SET può solo assegnare un valore scalare. Se la query restituisce più valori/righe , SET genera un errore. SELEZIONA assegnerà uno dei valori alla variabile e nascondere il fatto che più valori sono stati restituiti (così si sarebbe probabilmente mai sapere perché qualcosa non andava altrove - divertirsi la risoluzione dei problemi che uno)
  • Quando assegnando da una query, se non v'è alcun valore restituito allora SET assegnare NULL, dove SELEZIONA non eseguire l'assegnazione a tutti (quindi la variabile non verrà modificata dal suo precedente valore)
  • quanto riguarda le differenze di velocità - non ci sono differenze dirette tra SET e SELEZIONA. Tuttavia, l'abilità di SELEZIONA per effettuare assegnazioni multiple in uno scatto gli conferisce un leggero vantaggio rispetto a SET.