作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现一个插入存储过程。基本上,存储过程
的工作原理是检查记录是否存在,然后继续执行插入。变量 @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/
我是一名优秀的程序员,十分优秀!