【问题标题】:"Conversion failed when converting the varchar value 'NULL' to data type int"“将 varchar 值 'NULL' 转换为数据类型 int 时转换失败”
【发布时间】:2010-09-30 13:06:06
【问题描述】:

当我将记录插入长表时,出现错误 “将 varchar 值 'NULL' 转换为数据类型 int 时转换失败” 如何确定哪些列错误?

该表有许多字段和数百万条记录。当我尝试将“NULL”字符串插入某个整数列时,每次迭代需要 10 分钟。我认为 SQL Server 可以告诉我该列的确切名称 :(

【问题讨论】:

  • 长表是什么意思,您能说明导致问题的 SQL 吗?
  • 你在哪里看到这个错误。您是从查询分析器运行脚本还是从 dotNet 应用程序中的 executeScalar 调用中冒泡。一旦我们知道了这一点,也许我们可以就如何解决这个问题提供一些更好的建议。

标签: sql-server


【解决方案1】:

如果该值为真正的NULL,则不会出现转换错误。但是,如果你有一个 string = "NULL" 那么你会得到这个错误。

你能做的是……

NullIf(YourValueHere, 'NULL')

NullIf如果与第二个参数不同,则返回第一个参数的值。如果参数相同,NullIf会返回NULL

例如:

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

Select NullIf('null','null')

第一个将返回“任何值”,第二个将返回 NULL(不是“null”)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      开始一次注释掉一个东西,直到它停止轰炸。或者,看看你传递的哪个值对于 int 列是 NULL。

      【讨论】:

      • 我同意,不一定优雅或高效,但我会这样做。
      【解决方案4】:

      您是否需要修复数据,或者您可以为插入将空值转换为 0 吗?

      如果你可以转换,你可以用 ISNULL 函数包装你正在转换的 varchars。只需将以下内容放在插入到 int 字段中的任何值周围。

      ISNULL(col1,0)
      

      【讨论】:

        【解决方案5】:

        对于每个“NULL”值,将其从 Excel 文档或导入 SQL 的文档中删除。留空即可。

        'NULL' 是一个字符串,因此存在转换问题。

        【讨论】:

          猜你喜欢
          • 2012-03-10
          • 1970-01-01
          • 2011-12-01
          • 2012-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多