2010-09-22 10 views
16

Por lo tanto, estoy escribiendo este Stored Proc y realmente apestaba en SQL.SQL Seleccione una fila y almacene en una variable de SQL

mi pregunta para ustedes es:

¿Se puede seleccionar una fila entera y almacenarlo en una variable?

Sé que puedo hacer algo como:

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

Pero puedo seleccionar toda la fila de sometable y almacenarlo en una variable?

Respuesta

26

Se pueden seleccionar los campos en múltiples variables:

DECLARE @A int, @B int 

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

Otro, potencialmente mejor enfoque sería utilizar una variable de tabla:

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

A continuación, puede seleccionar entre la variable de tabla como una mesa normal

+0

sí supongo que podría hacer eso ... Esa podría ser la mejor solución en este caso ... Básicamente estoy tratando de limpiar mi atroz código SQL y esto lo haría un poco más limpio, ahora mismo básicamente tengo el mismo código en el bloque if que está en el bloque else ... esto al menos eliminaría algún código repetido ... – EJC

+0

@EJC: "ahora mismo tengo básicamente el mismo código en el bloque if que está en el bloque else" - nota su enfoque actual puede ser mejor desde el punto de vista del rendimiento, pero obviamente deberá probarlo. – onedaywhen

+0

por supuesto! :) gracias por el consejo – EJC

5

Se puede crear una variable de tabla que coincida con el esquema de la tabla y almacenar la hilera en ella:

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