我正在尝试将nvarchar(16)
转换为bigint
但收到如下错误
"Arithmetic overflow error converting expression to data type int."
我如何解决这个问题,这是我的sp
Create Procedure [dbo].[GenerateAccountNo]
As
Begin
declare @tmp bigint
set @tmp =(CONVERT(bigint,'1111111111111111'))
return @tmp
End
并致电程序
DECLARE @returnvalue bigint
EXEC @returnvalue = GenerateAccountNo
select @returnvalue
答案 0 :(得分:3)
存储过程的返回值是INT,而不是BIGINT。存储过程用于数据选择。在这种情况下,您应该使用FUNCTION来返回与表无关的标量值。
答案 1 :(得分:1)
来自MSDN
将状态值返回给调用过程或批处理以指示成功或失败(以及失败的原因)。
您将从存储过程返回状态(INT
)。这将是执行结果代码(成功或失败)。如果要从存储过程返回结果,只需在SP中使用SELECT
。
CREATE PROCEDURE [dbo].[GenerateAccountNo]
As
BEGIN
SELECT CONVERT(BIGINT,'1111111111111111')
END
答案 2 :(得分:1)
我没有在很长一段时间内编写C#,但你不能使用输出参数,如下所示?也就是说,根据您的方法中需要的实际代码,Lukos建议的用户定义函数可能是更好的选择。
create procedure [dbo].[generateaccountno] @account_number [bigint] = null output
as
begin
set @account_number =( convert(bigint, '1111111111111111') );
end;
go
declare @account_number [bigint];
execute [dbo].[generateaccountno] @account_number = @account_number output;
select @account_number as [@account_number];
答案 3 :(得分:0)
Create Procedure [dbo].[GenerateAccountNo]
As
Begin
declare @tmp bigint
set @tmp =(CONVERT(bigint,'1111111111111111'))
select @tmp
End
并按如下方式调用该程序......
SqlCommand cmd = new SqlCommand("GenerateAccountNo", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parm = new SqlParameter("@accountNo", SqlDbType.NVarChar,16);
parm.Direction = ParameterDirection.Output;
cmd.Parameters.Add(parm);
cmd.ExecuteNonQuery();