Sql 根据条件执行存储过程

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

我尝试使用存储过程在数据库中插入数据,但根据某些条件。例如,如果数据库中已经存在数据,则不应执行存储过程。 我正在执行以下代码,但它每次都返回0,而不是我想要的。我能做什么

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,我可以做什么,表示已插入数据。那么如何在“检查此主题”中获取此值: