“将数据类型varchar转换为数字时出错。” - 什么专栏?

时间:2010-07-01 09:47:10

标签: sql-server

我有一个巨大的INSERT - 有200列的声明,而且我看到了可怕的Error converting data type varchar to numeric。有什么地方我可以看到包含“varchar”值的实际列吗?我知道我可以一次删除其中一个列,直到错误消失,但这非常繁琐。

3 个答案:

答案 0 :(得分:6)

不幸的是,这个错误是一个严重的痛苦,并没有简单的方法来解决它。当我在过去遇到它时,我总是只需要排除一组列,直到找到罪魁祸首。

另一种方法可能是在T-SQL中使用ISNUMERIC()函数来尝试找到罪魁祸首。假设目标表中的每一列都是数字(如果不是,则进行相应调整),您可以尝试这样做:

SELECT *
  FROM SourceTable
 WHERE ISNUMERIC(Column1) = 0
    OR ISNUMERIC(Column2) = 0
    OR ISNUMERIC(Column3) = 0
    OR ISNUMERIC(Column4) = 0
    ...

这将显示包含非数字值的行,并且应该清楚地说明它所在的列。我知道这很乏味,但至少它可以帮助你追捕实际值,除了列之外造成麻烦。

答案 1 :(得分:5)

您没有指定SQL Server版本或行数。

对于SQL2005 +将OUTPUT子句添加到INSERT可能有助于识别恶意行,因为它将输出插入的行,直到遇到错误,因此下一行是有问题的行

DECLARE @Source TABLE
(
Col1 VARCHAR(10),
Col2 VARCHAR(10)
)

INSERT INTO @Source 
SELECT '1','1' UNION ALL
SELECT '2','2' UNION ALL
SELECT '3','3' UNION ALL
SELECT '4A','4' UNION ALL
SELECT '5','5' 


DECLARE @Destination TABLE
(
Col1 INT,
Col2 VARCHAR(10)
)

INSERT INTO @Destination 
OUTPUT inserted.*
SELECT * 
FROM @Source

返回

    (5 row(s) affected)
    Col1        Col2
    ----------- ----------
    1           1
    2           2
    3           3
    Msg 245, Level 16, State 1, Line 23
    Conversion failed when converting the varchar value '4A' to data type int.

答案 2 :(得分:0)

嗯,这只是一个预感但是如何将数据插入临时表并使用GUI将数据迁移到另一个表呢?如果它仍然产生错误,您至少应该能够获得关于该非数字列的更多反馈......

如果不起作用,请考虑尝试this.

干杯!