2011-02-25 12 views
10

Come si memorizza la colonna selezionata in una variabile?Come posso memorizzare la colonna selezionata in una variabile?

provare questo, ma mi passi una sintassi non corretta errore

declare @EmpId int 
SELECT dbo.Employee.Id as @EmpId FROM dbo.Employee 
+0

Se le altre risposte non stanno aiutando, perché si desidera elaborare più di una riga, aiuterebbe a sapere cosa vuoi fare con gli EmpIds. – Xoltar

risposta

35
select @EmpID = ID from dbo.Employee 

O

set @EmpID = (selezionare id da dbo.Employee)

Si noti che il select la query potrebbe restituire più di un valore o righe. in modo da poter scrivere una query di selezione che deve restituire una riga.

Se volete aggiungere più colonne di una variabile (MS SQL), v'è la possibilità di utilizzare tabella definita variabile

DECLARE @sampleTable TABLE(column1 type1) 
INSERT INTO @sampleTable 
SELECT columnsNumberEqualInsampleTable FROM .. WHERE .. 

Come tabella tipo di variabile non esistono in Oracle e altri, si dovrà definire:

DECLARE TYPE type_name IS TABLE OF (column_type | variable%TYPE | table.column%TYPE [NOT NULL] INDEX BY BINARY INTEGER; 

- Poi per dichiarare una variabile di tabella di questo tipo: variable_name type_name;

- Assegnazione di valori a una variabile TABLE: variable_name(n).field_name := 'some text';

- dove 'n' è il valore dell'indice

+0

Msg 141, livello 15, stato 1, riga 19 Un'istruzione SELECT che assegna un valore a una variabile non deve essere combinata con le operazioni di recupero dati. –

+0

@Abu: è necessario assegnare ** tutte ** le colonne nell'elenco di selezione alle variabili. Non è possibile combinare una selezione normale che restituisce un risultato al client con uno che assegna alle variabili. Ovviamente si può ovviamente fare 'SELECT @ var1 come somecol, @ var2 come anothercol' subito dopo. –

+0

Puoi farlo con dire selezionando cinque colonne ma inserendone una solo in una variabile temporanea? – Casey

1

Questo è come assegnare un valore a una variabile:

SELECT @EmpID = Id 
    FROM dbo.Employee 

Tuttavia, la query sopra sta tornando più di un valore. Dovrai aggiungere una clausola WHERE per restituire un singolo valore Id.

2

Ipotizzando una query restituirebbe una singola riga, è possibile utilizzare sia

select @EmpId = Id from dbo.Employee 

O

set @EmpId = (select Id from dbo.Employee) 
+1

E se avessi più di una singola riga? come gestiresti –

+0

@Abu Hamzah: non puoi. Una variabile può contenere solo un valore. Se la query restituisce più di una riga, quale valore ti aspetti di inserire nella variabile? –

+0

nella mia situazione ho 2 nomi di colonna che dovrei tenere premuto 1) EmpId, 2) RegId - potrebbe avere più di una riga o solo una riga e sto tenendo in una variabile da confrontare con gli altri .. non sono sicuro se questo è l'approccio giusto –

Problemi correlati