我正在使用SQL Server 2000兼容模式的旧系统。有一个存储过程可以从查询中选择进入虚拟表。
运行查询时,出现以下错误:
将数据类型varchar转换为数字时出错
这最初告诉我,一些字符串正试图进入数字列。
要进行调试,我将虚拟表创建为物理表并开始删除每一列。
罪魁祸首列称为accnum
(存储银行帐号,其源数据类型为varchar(21)
),我正尝试将其插入到numeric(16,0)
列中,这显然可能引起问题。
因此,我在创建的物理表中也创建了accnum
列varchar(21)
,并导入了100%。我还添加了一个名为accnum2
的附加列,并将其设置为numeric(16,0)
。
导入数据后,我继续将accnum2
更新为accnum
的值。瞧,它会更新而不会出现错误,但不能与插入...选择查询一起使用。
我必须使用提供的数据类型。有什么想法可以解决这个问题吗?
答案 0 :(得分:1)
您可以尝试在插入语句中使用转换吗?
SELECT [accnum] = CASE ISNUMERIC(accnum)
WHEN 0 THEN NULL
ELSE CAST(accnum AS NUMERIC(16, 0))
END