Sql server 在if条件下设置存储过程的返回值

Sql server 在if条件下设置存储过程的返回值,sql-server,sql-server-2005,Sql Server,Sql Server 2005,我有一个SP有这样的情况 IF NOT EXISTS (Select * from bom_steel where fpart = @fpart) BEGIN INSERT INTO bom_steel VALUES (@fPart,@fL,@fH,@fW,@fDesc) END ELSE if(Select * from Employee where Empid = @empid) BEG

我有一个SP有这样的情况

IF NOT EXISTS (Select * from bom_steel where fpart = @fpart)
        BEGIN
            INSERT INTO bom_steel 
            VALUES (@fPart,@fL,@fH,@fW,@fDesc)
        END
    ELSE if(Select * from Employee where Empid = @empid)
        BEGIN
            Return  ‘1’
        END
Else
Begin
UPDATE bom_steel 
            SET fl=@fl, fh=@fH, fW=@fW 
            where Empid =@ empid
end

when this condition passes , I am returning an value  as  1
ELSE if(Select * from Employee where Empid = @empid)
        BEGIN // here i will  to be  doing any operation(DML) .so i want to just return an value as  '1'                
               Return  ‘1’
        END
在我的代码隐藏中
这里cmd是SqlCommand

Int intcount= cmd.ExecuteNonQuery();
在这种情况下,它总是将值返回为-1

即使我将返回值设置为“1”,它仍然将返回值设置为-1

有人能告诉我,为了从那里返回值1,我应该怎么做吗

任何帮助都会很好
谢谢

您试图返回的是字符值,而不是
int
。尝试删除单引号

还有疯子说的话
ExecuteNonQuery()
返回受影响的行数。虽然这让我想知道你的例子;为什么会返回-1?

尝试这样做

Int intcount= cmd.ExecuteScalar();
而不是

Int intcount= cmd.ExecuteNonQuery();
仅返回受影响的行数


此外,请删除返回值中的单引号,如下面Andrew所示,或者将intCount的类型改为string。

@Ardman-现在是我打败任何人的时候了!我整个上午都在挨打。呵呵!我想知道过程中的“return 1”是否会将该值返回给调用方,如BOL所述:“对于UPDATE、INSERT和DELETE语句,返回值是受命令影响的行数。对于所有其他类型的语句,返回值是-1。”这似乎意味着即使是“return”语句将导致-1返回到客户端。@Tony-
return 1
将发送该返回值,是的。由于SP可能包含多个执行不同操作的语句,因此可以返回任何希望为
int
的值;例如,您可以对SP中受多条语句影响的行求和。但这里的问题似乎是错误的值,以及它的调用方式。@Andrew-谢谢,我认为它应该返回值,但被来自BOL的看似矛盾的消息弄糊涂了。@Tony-我想看看这是否解决了问题;我怀疑这起案件中可能还有其他原因。然后,可能-1被作为“受影响的记录”返回,因为“另一个操作”在SP中最后发生-
return(char)