我正在尝试实现插入存储过程。基本上,它的工作原理是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
答案 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)