从SQL Server存储过程返回bigint

时间:2014-09-12 12:09:52

标签: c# sql stored-procedures sql-server-2008-r2

我在SQL Server中编写了一个存储过程,它将返回Bigint

alter procedure [dbo].adding 
    @one bigint,
    @two bigint,
    @startid bigint output 
as
begin
    set @startid = @one + @two

    return @startid     
end

但是在返回值时我得到了一个异常

  

将表达式转换为数据类型int的算术溢出错误

任何人都可以帮我解决这个问题吗?

提前致谢

注意:上述查询与我正在使用的程序完全相同

更新:

我有一个如下代码

_lookupId = cmdInsert.Parameters.Add("RetVal", SqlDbType.BigInt);
                        _lookupId.Direction = ParameterDirection.ReturnValue;

                        _procIn01 = cmdInsert.Parameters.Add("@idCount", SqlDbType.VarChar, 500);
                        cmdInsert.Parameters["@idCount"].Value = idCount;
                        _procIn01.Direction = ParameterDirection.Input;

                        _procIn02 = cmdInsert.Parameters.Add("@requestFrom", SqlDbType.VarChar, 100);
                        cmdInsert.Parameters["@requestFrom"].Value = clientId;
                        _procIn02.Direction = ParameterDirection.Input;

                        _pramOut = cmdInsert.Parameters.Add("@startID", SqlDbType.BigInt);
                        _pramOut.Direction = ParameterDirection.Output;
                        cmdInsert.ExecuteScalar();

如果没有返回值,我怎么能将值赋给" RetVal"我的_lookup变量。

3 个答案:

答案 0 :(得分:6)

过程返回状态值,该值始终为整数。您只需设置它即可从存储过程返回值:

alter procedure [dbo].adding 
    -- add the parameters for the stored procedure here
    @one bigint,
    @two bigint,
    @startid bigint output 
as
begin
    -- set nocount on added to prevent extra result sets from
    -- interfering with select statements.

    set @startid = @one + @two     
end;

使用return判断存储过程是否成功。

您可以通过以下方式调用此方法:

declare @startid bigint;

exec dbo.adding(1, 2, @startid output);

select @startid;

答案 1 :(得分:1)

发生此错误是因为您的返回但您必须使用set来设置变量或使用select

Set @outputvalue=@val1+@val2

Select @outputvalue=@val1+@val2

答案 2 :(得分:1)

Sotred程序返回答案是显示sp成功或不成功的整数 你不能用它来获得big int号码 如果你想得到一个没有out put parameter的输出值,那么你可以使用select with out变量,例如,
调用

Select @val1+@val2

现在使用Execute Scalar命令方法获取输出。