2013-09-25 82 views
0

我试图使用存储过程但根据某些条件在数据库中插入数据。例如,如果数据库中已存在数据库,则不应执行存储过程。 我正在做下面的代码,但它每次都返回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 protected]) 
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 
+0

当你说@result始终为0,数据是否得到插入每次你打电话的SP? – rcs

+1

“每次都返回0” - 我希望你正在检查错误的输出 - 你如何调用存储过程和/或获得0? –

+0

没有数据没有插入它工作正常,但总是返回0 – user2353848

回答

1

您可以简单地进行如下操作;

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 protected]) 

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 
+0

但我想提供一些错误信息给用户例如。用户已经存在,注册成功等,因为我想要一些返回值 – user2353848

+0

使用'@@ ERROR'参数,'IF(@@ ERROR <> 0)set @result = 0' –

+0

将你解释它我是新的sql server – user2353848

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 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 
+0

良好做法!支持 –

+0

那么我怎么能得到这个值在C# – user2353848

+0

检查此主题:http://stackoverflow.com/questions/6210027/c-sharp-calling-sql-server-stored - 过程 - 与返回值 – Devart

1

可以使用RAISEERROR事件这种情况下

if EXISTS(select Email_ID from Registration where [email protected]) 
begin 
    RAISERROR(N'Email id already exist.', 10, 2,'') 
end 

这里10是根据认定为信息meassage或严重级别的SQL Server严重级别和例外。欲了解更多信息

RaiseError

Database Engine Severity Levels