2011-01-10 16 views
34

SQL Server 2005に複数の変数を持つストアドプロシージャがあり、selectステートメントを使用してこれらの変数の値を設定したいとします。 3つの変数はすべて同じテーブルから来ており、以下に示すように現在の方法ではなくselectステートメントを使って変数を設定する方法があります。それを理解するのを助けてください。SELECTを使用してSQLストアドプロシージャの変数を設定する

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

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 
関連する問題