2011-01-10 85 views
34

我在SQL Server 2005中有多个变量的存储过程,我想使用select语句设置这些变量的值。所有这三个变量都来自同一个表,并且应该有一种方法来使用一个select语句来设置它们,而不是我现在具有的方式,如下所示。请帮我弄明白。SQL存储过程使用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 
) 

回答

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

我一直在写了类似的声明。比较我的语句和这个语句,我一直接受@currentTerm = CurrentTerm作为变量,返回值为NULL。有什么建议么? – srbhattarai 2015-09-04 07:11:15

12

您目前的方法所具有的一个优点是,如果谓词返回多行,则会引发错误。重现您可以使用的内容。

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