我有一条包含200个字段的大型INSERT
语句,突然遇到了可怕的将数据类型varchar转换为numeric时出错
。 有没有地方可以看到包含"varchar"值的实际列? 我知道我可以逐个删除字段,直到错误消失,但这非常繁琐。
我有一条包含200个字段的大型INSERT
语句,突然遇到了可怕的将数据类型varchar转换为numeric时出错
。 有没有地方可以看到包含"varchar"值的实际列? 我知道我可以逐个删除字段,直到错误消失,但这非常繁琐。
很遗憾,这个错误非常棘手,没有简单的方法来解决它。过去当我遇到类似问题时,我总是不得不将一组列注释掉,直到找到罪魁祸首。
另一种方法可能是在T-SQL中使用ISNUMERIC()函数来尝试查找罪魁祸首。假设目标表中的每一列都是数字(如果不是,请相应调整),您可以尝试以下操作:
SELECT *
FROM SourceTable
WHERE ISNUMERIC(Column1) = 0
OR ISNUMERIC(Column2) = 0
OR ISNUMERIC(Column3) = 0
OR ISNUMERIC(Column4) = 0
...
这将暴露包含非数字值的行,并且应该很清楚地指出它所在的列。我知道这很繁琐,但至少可以帮助您查找实际值,以及引起问题的列。
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行) Col1 Col2 ----------- ---------- 1 1 2 2 3 3 Msg 245, 级别 16, 状态 1, 第23行 将varchar类型的值“4A”转换为int类型时转换失败。
好吧,这只是一个猜想,不过把数据插入到临时表中,然后使用 GUI 将数据迁移到另一个表中,怎么样?如果仍然生成错误,您应该至少能够获得有关那个非数字列的更多反馈...
如果不行,考虑尝试this.。
干杯!