2010-09-22 1 views
16

Quindi, sto scrivendo questo Stored Proc e faccio davvero schifo su SQL.SQL Selezionare una riga e archiviare in una variabile SQL

la mia domanda a voi ragazzi è:

Posso selezionare un'intera riga e memorizzarlo in una variabile?

So che posso fare qualcosa di simile:

declare @someInteger int 
select @someInteger = (select someintfield from sometable where somecondition) 

Ma posso selezionare l'intera riga da sometable e memorizzarlo in una variabile?

risposta

26

È possibile selezionare i campi in più variabili:

DECLARE @A int, @B int 

SELECT 
    @A = Col1, 
    @B = Col2 
FROM SomeTable 
WHERE ... 

altro, potenzialmente migliore, approccio sarebbe quello di utilizzare una variabile di tabella:

DECLARE @T TABLE (
    A int, 
    B int 
) 
INSERT INTO @T (A, B) 
SELECT 
    Col1, 
    Col2 
FROM SomeTable 
WHERE ... 

È possibile quindi selezionare la variabile tavolo come un tavolo normale.

+0

sì Credo potrebbe farlo ... Potrebbe essere la soluzione migliore in questo caso ... Sto fondamentalmente cercando di ripulire il mio atroce codice SQL e questo lo renderebbe un po 'più pulito, in questo momento ho praticamente lo stesso codice in il blocco if che si trova nel blocco else ... questo almeno eliminerebbe qualche codice ripetuto ... – EJC

+0

@EJC: "adesso ho praticamente lo stesso codice nel blocco if nel blocco else" - nota il tuo approccio attuale potrebbe essere il migliore dal punto di vista delle prestazioni, ma ovviamente avresti bisogno di testare. – onedaywhen

+0

ovviamente! :) grazie per il consiglio – EJC

5

Si potrebbe creare una variabile di tabella che corrisponde al tuo schema della tabella e memorizzare la singola riga in esso:

declare @myrow table(field0 int,field1 varchar(255)) 
insert into @myrow 
select field0,field1 from mytable where field0=1