2011-06-22 7 views
0

私のデータベースにテーブル用のプロシージャがありますが、私が望むことをしていないようです。誰かが私が間違っているかどうかを確認できますか?私はすべてSQLを初めて使っています。データベース内のSQLをトグルする

これは私の手順です。 私はそれを教えるとadminのステータスを1から0に、0から1に変更することになっています。しかし、それはそれを変更し、:(

ALTER PROCEDURE [sesuser].[Login_Admin_Toggle] 
(
    @loginID INT 
) 

AS 
BEGIN 

DECLARE @tmpId INTEGER; 

SET @tmpId = (SELECT SESAdmin FROM [ses_users].[sesuser].[SESLogin] WHERE SESLoginID = @loginID); 

IF (@tmpId = 1) 
BEGIN 
    SET @tmpId = 0 
    RETURN 
END 
ELSE 
    SET @tmpId = 1 

UPDATE [ses_users].[sesuser].[SESLogin] 
SET SESAdmin = @tmpId 
WHERE SESLoginID = @loginID 

END 

答えて

1

Alex Kは完全に正しいです。変数を0に設定してからRETURNを設定すると、そこからUPDATEステートメントに至ることはありません。

しかし、わずかな接線で、実際には1つのステートメントですべて実行できます。 。

BEGIN 

    UPDATE [ses_users].[sesuser].[SESLogin] 
    SET SESAdmin = 1 - SESAdmin 
    WHERE SESLoginID = @loginID 

END 
+0

ありがとう、それは助け:) – Angie

1

そのが0に更新したことがないので、あなたがRETURNので、@tmpId = 1場合は実行を停止するのでそれが戻って切り替えませんが、それをバックに変更はありませんいくつかの理由がある。

+0

私は例のように書かれたifステートメントを見てきました。したがって、正しい構文であると仮定しました。どのように正しく書くべきかアドバイスできますか? – Angie

+0

RETURN行を削除するだけです。 RETURNは、「ストアドプロシージャの実行を今停止する」を意味するコマンドです。その前後のBEGINとENDも必須ではありませんが、何らかの方法を含める方が良い方法を提案する人もいます(しかし、ELSEブロックの 'SET @tmpId = 1'の周りにもそれらを含めることにします)。 – MatBailie

関連する問題