首页 > 解决方案 > 将 varchar 值“YTLQVLBK”转换为数据类型 int 时转换失败。嵌套异常是 com.microsoft.sqlserver.jdbc.SQLServerException:

问题描述

我正在调用空手道 DButil 来执行空手道脚本中的数据库查询之一:

 * def test = db.readValue('SELECT * FROM CLIENT C WHERE C.ClientCode = ' + globalAccountID)

这里 i',无法将 globalAccountID 转换为字符串。请帮助解决这个问题。

我的错误跟踪如下:

javascript 评估失败:db.readRows('SELECT * FROM CLIENT C WHERE C.ClientCode = ' + globalAccountID), StatementCallback; SQL [SELECT * FROM CLIENT C WHERE C.ClientCode = 707] 的未分类 SQLException;SQL状态[S0001];错误代码[245];将 varchar 值“YTLQVLBK”转换为数据类型 int 时转换失败。嵌套异常是 com.microsoft.sqlserver.jdbc.SQLServerException:将 varchar 值“YTLQVLBK”转换为数据类型 int 时转换失败。

标签: sql-serverjdbc

解决方案


问题出在这段代码中:

C.ClientCode = 707

更具体地说,您正在将整数与字符串进行比较。根据 SQL Server数据类型优先级规则,这意味着C.ClientCode在进行比较之前将列转换为整数。

解决方案是转换707为字符串(varchar)类型。你可以这样做:

'SELECT * FROM CLIENT C WHERE C.ClientCode = ''' + globalAccountID + ''''

推荐阅读