繁体   English   中英

在SQL Server中将nvarchar转换为bigint

[英]Converting nvarchar to bigint in sql server

我正在尝试将nvarchar(16)转换为bigint但收到如下错误

"Arithmetic overflow error converting expression to data type int."

我该如何解决呢?

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

来自存储过程的返回值是INT,而不是BIGINT。 存储的过程是为数据选择而设计的。 在这种情况下,应该使用FUNCTION来返回与表无关的标量值。

MSDN

将状态值返回到调用过程或批处理以指示成功或失败(以及失败的原因)。

您正在从存储过程中返回状态( INT )。 这将是执行结果代码(成功或失败)。 如果要从存储过程返回结果,只需在SP中使用SELECT

CREATE PROCEDURE [dbo].[GenerateAccountNo]
As 
BEGIN
    SELECT CONVERT(BIGINT,'1111111111111111')
END

我没有很长时间没写过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]; 

谢谢你的回答。 我将问题解决如下:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM