2012-07-26 114 views
2
IF(@ActiveStatus = 1) 
BEGIN 
    @PasswordStatus = 3 
END 
ELSE 
    SET @PasswordStatus = (SELECT password_status 
          FROM tbl_user 
          WHERE login_name = @LoginName_fromApp 
           AND [email protected] 
          ) 

我使用的是Microsoft SQL Server Management Studio中..這是一個語法錯誤嗎?

+0

MySQL和MSSQL不同的DBMS,我已經改變了標籤! – 2012-07-26 06:52:49

+1

嘿不要忘記標記爲接受或upvote它,如果解決方案適用於你.. – 2012-07-26 07:00:06

回答

2

IF條款需要設置變量,因此使用selectset,不直接寫@PasswordStatus = 3set/select @PasswordStatus = 3

if(@ActiveStatus = 1) 
begin 
--chage of code 

set @PasswordStatus = 3 --or select @PasswordStatus = 3 
    END 
else 
begin 
Set @PasswordStatus = (select password_status from tbl_user where [email protected]_fromApp and [email protected]) 

end 

編輯

的評論 - @ marc_s使用SET @var = 3,如果你只是設置一個 「標」 的價值 - 使用SELECT @var = ID FROM dbo.Table1如果你真正從選擇一個表(或視圖)

+1

如果你只是設置一個「標量」值,使用'SET @Var = 3' - 使用'SELECT @Var = ID FROM dbo .Table1'如果你真的從表格(或視圖) – 2012-07-26 07:00:54

+0

@marc_s - 感謝指出.... – 2012-07-26 07:02:28

0

當R作爲遵循

if(@ActiveStatus = 1) 
begin 
Set @PasswordStatus = 3 
END 
else 
begin 
Set @PasswordStatus = (select password_status from tbl_user where 
[email protected]_fromApp and [email protected]) 
end 
Select @PasswordStatus 
+0

我不downvoter,但我認爲你poiting同樣的錯誤,我指出我的答案..沒有任何變化 – 2012-07-26 06:59:11

-1

設置估值師的任何變量使用你忘記了第二BEGIN/END。我也將會是防禦性的情況下,添加一個TOP(1)SELECT它返回一個以上的記錄

IF @ActiveStatus = 1 
     BEGIN 
      SET @PasswordStatus = 3 
     END 
    ELSE 
     BEGIN 
      SELECT @PasswordStatus = TOP(1) password_status 
      FROM tbl_user 
      WHERE 
      [email protected]_fromApp AND 
      [password][email protected] 
     END 
+0

不介意被打倒;感覺也許是SO應該建立一些東西,這樣如果一個人記下他們必須留下一個評論(可以是匿名的)......我嘗試回答的原因是要學習,如果沒有評論,那麼我該如何學習! – whytheq 2012-07-26 10:17:19

0

另外一個

select 
     @PasswordStatus = case when @ActiveStatus = 1 then 3 else password_status end 
from 
    tbl_user 
where 
     login_name = @LoginName_fromApp and [email protected]