在sql server中将nvarchar转换为bigint

时间:2014-09-01 10:26:02

标签: sql sql-server tsql

我正在尝试将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

4 个答案:

答案 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();