“将数据类型varchar转换为数字时出错。” - 什么专栏?
问题描述:
我有一个巨大的INSERT
-statement与200列和suddendly我得到了可怕的Error converting data type varchar to numeric
。有什么地方可以看到包含“varchar”值的实际列吗?我知道我可以一次删除其中一列,直到错误消失,但这非常乏味。“将数据类型varchar转换为数字时出错。” - 什么专栏?
答
您不指定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.
+0
之前从未试过INSERT上的OUTPUT。谢谢! – Espo 2010-07-09 06:47:21
答
不幸的是,这个错误是一个严重的痛苦,没有简单的方法来解决它。当我过去遇到它时,我总是不得不评论列组,直到找到罪魁祸首。
另一种方法可能是使用T-SQL中的ISNUMERIC()函数来尝试查找罪魁祸首。在你的目标表假设每列数字(相应调整,如果不是),你可以试试这个:
SELECT *
FROM SourceTable
WHERE ISNUMERIC(Column1) = 0
OR ISNUMERIC(Column2) = 0
OR ISNUMERIC(Column3) = 0
OR ISNUMERIC(Column4) = 0
...
这将会使包含您的非数字值的行,而应该让它非常清楚哪一列它是英寸,我知道它很乏味,但至少它可以帮助你追捕实际价值,除了造成麻烦的专栏之外。
您可以一次注释掉一半列;仍然乏味,但更快。 – 2010-07-01 09:57:26