2011-06-22 74 views
0

我有一个在我的数据库中的表的过程,但它似乎没有做我想做的事。有人可以检查我是否做错了吗?我是新来的SQL在一起。数据库中的SQL切换变量

这是我的程序。 当我告诉它时,它应该将管理状态从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,然后返回,这意味着你永远不会从那里得到UPDATE语句。 。

BEGIN 

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

END 
+0

谢谢,那帮了:) – Angie

1

它不会切换回因为你RETURN所以如果@tmpId = 1停止执行,所以它永远不会更新到0

+0

我已经看到if语句写得像这样在一个例子中,因此我认为它是正确的语法。你能否建议我应该如何正确写下它? – Angie

+0

只需删除RETURN行。 RETURN是一个意味着“立即停止执行存储过程”的命令。围绕它的BEGIN和END也不是必需的,但有些人可能会建议以任何方式包含它们是更好的做法(但是,我也会将它们包含在ELSE块中的'SET @tmpId = 1'附近。) – MatBailie