首页 > 解决方案 > 错误“将 varchar 值 'ABC' 转换为数据类型 int 时转换失败。”

问题描述

需要一些帮助来解决我在 SQL Server 中遇到的错误。我的查询中有以下行在“UserCode”列中搜索,然后根据这些代码对“Amount”列求和。但是,在 usercode 列中,有一些变量,例如“ABC”,而不是所有整数。这会导致错误“将 varchar 值 'ABC' 转换为数据类型 int 时转换失败。我尝试过搜索,但找不到解决方法。谁能告诉我克服此错误的最佳方法是什么?

SUM((CASE WHEN (ec.UserCode >= 100 AND ec.UserCode <= 200) 
          THEN e.Amount 
          ELSE '0' 
     END)
   ) AS 'ColumnName'

谢谢!

标签: sqlsql-server

解决方案


else正在返回一个字符串,所以这是一个问题。仅当存储为字符串时才会导致另一个e.Amount- 恐怖的恐怖,而不是存储具有正确类型的值。

因此,如果这是导致问题的代码,我建议:

SUM(CASE WHEN ec.UserCode >= 100 AND ec.UserCode <= 200
         THEN TRY_CONVERT(?, e.Amount)
         ELSE 0
    END) AS ColumnName

?是适当类型的占位符,可能是、int或类似的东西。bigintdecimal(20, 4)

UserCode我应该注意:如果是字符串,也可能导致错误。为此,使用字符串比较:

SUM(CASE WHEN ec.UserCode >= '100' AND ec.UserCode <= '200'
         THEN TRY_CONVERT(?, e.Amount)
         ELSE 0
    END) AS ColumnName

或者,如果您愿意,try_convert()还有:

SUM(CASE WHEN TRY_CONVERT(int, ec.UserCode) >= 100 AND
              TRY_CONVERT(int, ec.UserCode <= 200
         THEN TRY_CONVERT(?, e.Amount)
         ELSE 0
    END) AS ColumnName

推荐阅读