转换失败:将varchar值“NULL”转换为int数据类型时。

11
当我向一个长表中插入记录时,出现了错误:“在将varchar值'NULL'转换为数据类型int时转换失败”。 我如何确定哪一列出错了?
该表有许多字段和数百万条记录。 每次尝试在某个整数列中插入“NULL”字符串时,每个迭代需要10分钟才会失败。 我认为SQL服务器可以告诉我确切的列名:(

长表是什么意思?你能展示一下导致问题的SQL吗? - wcm
你在哪里看到这个错误?你是从查询分析器运行脚本还是从dotNet应用程序中的executeScalar调用中冒出来的?一旦我们知道了这一点,也许我们就可以提供一些更好的解决方案。 - wcm
5个回答

16

如果值真的为NULL,那么就不会出现转换错误。但是,如果你有一个字符串=“NULL”,那么就会出现这个错误。

你可以做的是...

NullIf(YourValueHere, 'NULL')

NullIf 函数返回第一个参数,除非它与第二个参数相同。如果两个参数相同,NullIf 将返回 NULL

例如:

Select NullIf('Any Value', 'NULL')

Select NullIf('null','null')

第一个将返回'Any Value',而第二个将返回NULL(不是'null')


4

从一开始逐个注释掉内容,直到不再出错。或者查看传递的值在 int 列中是否为 NULL。


我同意,这种方法可能不够优雅或高效,但这是我会选择的方式。 - Nathan Koop

4

它提到“varchar值'NULL'”表明您正在尝试将列的值设置为字符串“NULL”,而不是值NULL。

在语句中查找由引号括起来的单词NULL。您需要删除这些引号。


2

你需要修复数据吗?还是只需要将null转换为0来进行插入?

如果只需要转换,你可以使用ISNULL函数来包装那些需要转换的字符串变量。在插入到整型字段中的任何值周围添加以下内容即可。

ISNULL(col1,0)

0

对于每个“NULL”值,从您的Excel文档或导入到SQL的文档中删除它。只需将其留空。

“NULL”是一个字符串,因此会出现转换问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接