gpt4 book ai didi

mysql - SQL 存储过程 IF ELSE 逻辑错误

转载 作者:行者123 更新时间:2023-11-29 03:25:16 25 4
gpt4 key购买 nike

我正在尝试实现一个插入存储过程。基本上,存储过程 的工作原理是检查记录是否存在,然后继续执行插入。变量 @status 将用作指示器。但是,我发现这个query的一个特殊问题是当我执行query时,它会返回结果@status = 1 no无论数据是否存在。但是,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

最佳答案

尽量放在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 END,那么您的 else 语句的范围就是正在执行的下一行,即 INSERT INTO table1 (userID, userName) VALUES (@userid, @name) 仅在 else block 的范围内。并且 SET @status = 1 超出了 else block 的范围。因此,一旦 else block 执行,下一个查询将被执行,即 SET @status = 1

旁注:

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

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

关于mysql - SQL 存储过程 IF ELSE 逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37154896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com