SQL Server:将数据类型varchar转换为数字(奇怪的行为)时出错

时间:2018-12-19 22:35:20

标签: sql-server

我正在使用SQL Server 2000兼容模式的旧系统。有一个存储过程可以从查询中选择进入虚拟表。

运行查询时,出现以下错误:

  

将数据类型varchar转换为数字时出错

这最初告诉我,一些字符串正试图进入数字列。

要进行调试,我将虚拟表创建为物理表并开始删除每一列。

罪魁祸首列称为accnum(存储银行帐号,其源数据类型为varchar(21)),我正尝试将其插入到numeric(16,0)列中,这显然可能引起问题。

因此,我在创建的物理表中也创建了accnumvarchar(21),并导入了100%。我还添加了一个名为accnum2的附加列,并将其设置为numeric(16,0)

导入数据后,我继续将accnum2更新为accnum的值。瞧,它会更新而不会出现错误,但不能与插入...选择查询一起使用。

我必须使用提供的数据类型。有什么想法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试在插入语句中使用转换吗?

SELECT [accnum] = CASE ISNUMERIC(accnum) 
                     WHEN 0 THEN NULL 
                     ELSE CAST(accnum AS NUMERIC(16, 0)) 
                  END