SQL存储过程IF ELSE逻辑错误

时间:2016-05-11 06:41:30

标签: mysql sql stored-procedures

我正在尝试实现插入存储过程。基本上,它的工作原理是stored procedure将检查记录是否存在,然后继续执行插入。变量@status将用作指标。但是,我发现这个query的一个特殊问题是,当我执行query时,无论数据是否存在,它都会返回结果@status = 1。但是,INSERT函数没有问题,只有@status。以下是我的实施:

CREATE PROCEDURE save_proc
(
  @userid varchar(10)
  @name varchar(30)
)

AS

DECLARE @status int

  if exists ( SELECT * FROM table1 where userID = @userid AND userName = @name)
    SET @status = 0

  else
    INSERT INTO table1 (userID, userName) VALUES (@userid, @name)
    SET @status = 1

SELECT @status

2 个答案:

答案 0 :(得分:0)

else
begin
    INSERT INTO table1 (userID, userName) VALUES (@userid, @name)
    SET @status = 1
end

如上修改代码。您尚未定义其他人的范围。它只是插入声明。每次都执行SET @status = 1

答案 1 :(得分:0)

尝试将其放入BEGIN END

CREATE PROCEDURE save_proc
(
  @userid varchar(10)
  @name varchar(30)
)

AS

DECLARE @status int

  if exists ( SELECT * FROM table1 where userID = @userid AND userName = @name)
    SET @status = 0

    else
    begin
        INSERT INTO table1 (userID, userName) VALUES (@userid, @name)
        SET @status = 1
    end

如果你没有把BEGIN结束,那么你的else语句的范围就是下一行被执行,即INSERT INTO table1 (userID, userName) VALUES (@userid, @name)仅在else块的范围内。并且SET @status = 1超出了else块的范围。因此,一旦else块执行,将执行下一个查询,即SET @status = 1

旁注:

当您检查if exists时,请不要使用*通配符。相反,你可以使用1,即

if exists ( SELECT 1 FROM table1 where userID = @userid AND userName = @name)