在插入期间选择有错误的行

时间:2013-04-12 14:50:21

标签: sql sql-server select insert

在SQL Server中,当我尝试使用表中的直接select语句插入时,出现错误

Conversion failed when converting the nvarchar value 'CLONED' to data type int.

有什么方法可以看到引发此错误的特定行?

insert into manual_defect SELECT <long list of columns> from xyztable

2 个答案:

答案 0 :(得分:0)

您可以使用try catch并抛出行号,但我发现快速调试的最佳方法是选择前1000个,然后选择100并继续这样做直到找到导致问题的行。只是一个建议

答案 1 :(得分:0)

您从xyztable中选择的列之一是nvarchar类型,manual_defect中的匹配列是int。您需要在xyztable中找到行,其中该列中包含的某些行不会转换为int。

SELECT * FROM xyztable WHERE NOT ISNUMERIC(yournvarcharcolumn + '.0e0')

IsNumeric检查一个值(在这种情况下是一个字符串)是否可以转换为数字类型。通过在检查之前附加“.0e0”,我们确保只有整数才能起作用,因为当你将它添加到结尾时,字符串格式的任何其他数字类型都不会成为有效的数字类型。

如果你真的只想找到抛出你引用的错误的单行,那么这样可以更快地运行:

SELECT * FROM xyztable WHERE yournvarcharcolumn = 'CLONED'