从SQL Server存储过程返回bigint

4

我在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();

没有返回值,如何将值分配给我的_lookup变量中的"RetVal"?

过程返回状态。函数返回值。 - Gordon Linoff
你实际上不需要返回你的输出变量,只需设置它就足以为你的应用程序填充输出。 - Kritner
3个回答

7

存储过程返回一个状态值,这个值始终是一个整数。你可以通过设置该值来从存储过程中返回结果:

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;

@Backtrack...这里是如何在C#中编写代码的示例:https://dev59.com/2Wgv5IYBdhLWcg3wBMOg。 - Gordon Linoff

0

这个错误发生是因为你使用了 return,但你必须使用 set 去设置变量或使用 select。

Set @outputvalue=@val1+@val2

或者

Select @outputvalue=@val1+@val2

0

存储过程返回的答案是一个整数,表示存储过程是否成功
您不能用它来获取一个大整数数字 如果您想要获得无需输出参数的输出值,那么可以使用不带变量的select语句,例如:
调用

Select @val1+@val2

现在可以使用命令的Execute Scalar方法来获取输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接