Sql 根据条件执行存储过程
我尝试使用存储过程在数据库中插入数据,但根据某些条件。例如,如果数据库中已经存在数据,则不应执行存储过程。 我正在执行以下代码,但它每次都返回0,而不是我想要的。我能做什么Sql 根据条件执行存储过程,sql,sql-server,Sql,Sql Server,我尝试使用存储过程在数据库中插入数据,但根据某些条件。例如,如果数据库中已经存在数据,则不应执行存储过程。 我正在执行以下代码,但它每次都返回0,而不是我想要的。我能做什么 ALTER PROCEDURE dbo.SaveUser ( @cid int, @firstname varchar(20), @lastname varchar(20), @dob datetime, @gender varchar(20), @add varchar(100), @email
ALTER PROCEDURE dbo.SaveUser
(
@cid int,
@firstname varchar(20),
@lastname varchar(20),
@dob datetime,
@gender varchar(20),
@add varchar(100),
@email varchar(40),
@quali varchar(20),
@yop varchar(15),
@exp varchar(10),
@pass varchar(20)
)
AS
declare @result int
if EXISTS( select Email_ID from Registration where Email_ID=@email )
begin
set @result=4;
return @result;
end
else
begin
insert into Registration values(@cid, @firstname, @lastname, @dob, @gender, @add, @email, @quali, @yop, @exp, @pass );
set @result =0;
return @result;
end
你可以简单地进行如下操作
ALTER PROCEDURE dbo.SaveUser
(
@cid int,
@firstname varchar(20),
@lastname varchar(20),
@dob datetime,
@gender varchar(20),
@add varchar(100),
@email varchar(40),
@quali varchar(20),
@yop varchar(15),
@exp varchar(10),
@pass varchar(20)
)
AS
BEGIN
DECLARE @return int
if NOT EXISTS(select Email_ID from Registration where Email_ID=@email)
insert into Registration values(@cid, @firstname, @lastname,
@dob, @gender, @add, @email,
@quali, @yop, @exp, @pass )
If (@@ERROR <> 0)
Begin
Set @return = 4
Else
Set @return = 0
End
Return @return
END
试试这个-
ALTER PROCEDURE dbo.SaveUser
(
@cid INT,
@firstname VARCHAR(20),
@lastname VARCHAR(20),
@dob DATETIME,
@gender VARCHAR(20),
@add VARCHAR(100),
@email VARCHAR(40),
@quali VARCHAR(20),
@yop VARCHAR(15),
@exp VARCHAR(10),
@pass VARCHAR(20)
)
AS BEGIN
IF NOT EXISTS(
SELECT 1
FROM dbo.Registration
WHERE Email_ID = @email
) BEGIN
INSERT INTO dbo.Registration
SELECT @cid, @firstname, @lastname, @dob, @gender, @add, @email, @quali, @yop, @exp, @pass
RETURN 0;
END
RETURN 4;
END
您可以在此场景中使用raiseerror事件
if EXISTS( select Email_ID from Registration where Email_ID=@email )
begin
RAISERROR(N'Email id already exist.', 10, 2,'')
end
这里10是严重性级别,根据严重性级别,sql server标识为信息消息或异常。更多信息
当您说@result始终为0时,是否每次调用SP时都会插入数据?每次都返回0-我希望您检查了错误的输出-您是如何调用存储过程和/或获取0的?没有插入数据,它工作正常,但始终返回0请显示调用此存储过程/获取0的代码。您显示的代码看起来是正确的,所以问题在于您没有向我们显示的代码。调试起来异常困难。但我想向用户提供一些错误消息,例如用户已存在,注册成功等。为此,我需要一些返回值使用@@error参数,如果@@error 0 set@result=0,你会解释它吗?我是sql Server的新手它仍然返回0如果它返回0,我可以做什么,表示已插入数据。那么如何在“检查此主题”中获取此值: