2011-01-10 16 views
34

Tengo un procedimiento almacenado en SQL Server 2005 con múltiples variables y deseo establecer los valores de estas variables usando una instrucción select. Las tres variables provienen de una misma tabla y debería haber una manera de establecerlas usando una declaración de selección en lugar de la forma en que actualmente lo tengo, como se muestra a continuación. Por favor, ayúdame a resolverlo.Procedimiento almacenado de SQL establece variables usando SELECT

DECLARE @currentTerm nvarchar(max) 

DECLARE @termID int 

DECLARE @endDate datetime 

SET @currentTerm = 
(
    Select CurrentTerm from table1 where IsCurrent = 1 
) 

SET @termID = 
(
    Select TermID from table1 where IsCurrent = 1 
) 

SET @endDate = 
(
    Select EndDate from table1 where IsCurrent = 1 
) 

Respuesta

66
select @currentTerm = CurrentTerm, @termID = TermID, @endDate = EndDate 
    from table1 
    where IsCurrent = 1 
+0

he estado escribiendo las declaraciones similares. Comparando mi declaración con esta, he estado recibiendo @currentTerm = CurrentTerm como una variable y el valor devuelto es NULL. ¿Alguna sugerencia? – srbhattarai

12

Una de las ventajas de su enfoque actual es que generará un error si el predicado devuelve varias filas. Para reproducir eso puedes usar.

SELECT @currentTerm = currentterm, 
     @termID = termid, 
     @endDate = enddate 
FROM table1 
WHERE iscurrent = 1 

IF(@@ROWCOUNT <> 1) 
    BEGIN 
     RAISERROR ('Unexpected number of matching rows', 
       16, 
       1) 

     RETURN 
    END 
Cuestiones relacionadas