SQL0104 令牌 Col_Name 无效
Posted
技术标签:
【中文标题】SQL0104 令牌 Col_Name 无效【英文标题】:SQL0104 Token Col_Name was not valid 【发布时间】:2019-01-17 14:57:48 【问题描述】:我正在尝试使用以下查询更新 TableA,但它给了我一个错误 “IBM.Data.DB2.iSeries.iDB2SQLErrorException:'SQL0104 令牌 CNUM 无效。有效令牌:使用 SKIP WAIT WITH FETCH LIMIT ORDER WHERE OFFSET”。虽然我可以在 DB2 中使用相同的查询来更新数据库。
using (IDbCommand command = this.connection.CreateCommand())
command.CommandText = string.Format(
@"UPDATE 0.TableA
SET
STS = @Status,
USR = @User
WHERE
CNUM = @CNum", CoreServer.CoreCollection);
IDbDataParameter statusParam = CoreServer.CreateParameter(command, "@Status", string.Empty, 3);
IDbDataParameter UserParam = CoreServer.CreateParameter(command, "@User", string.Empty, 50);
IDbDataParameter cNumberParam = CoreServer.CreateParameter(command, "@CNum", string.Empty, 30);
statusParam.Value = CoreServer.ConvertToDatabase(input.Status);
UserParam.Value = input.User == null ? null : input.User.Trim();
cNumberParam.Value = input.CNumber.Trim();
iDB2Command db2Command = (iDB2Command)command;
db2Command.Transaction = (iDB2Transaction)transaction;
db2Command.ExecuteNonQuery();
其他插入和选择查询适用于同一个表
【问题讨论】:
CNUM 列代表什么? 字符串数据类型表的主键 所以,根据这个 IBM Documentation:应用程序生成了一个语法错误的 SQL 语句。如需帮助确定问题,请使用 ODBC 管理器随附的 ODBC 跟踪工具查看 SQL.LOG。 我建议查看 .log 文件以检查生成的 SQL 是否具有正确的语法。CoreServer.CreateParameter
是做什么的?
【参考方案1】:
我在复制/粘贴存在某种不可打印字符的 sql 时遇到此错误。
为了缩小问题范围,我:
用一些简单的东西替换了 sql...比如“select * from 我的表” 尽可能多地删除查询文本 逐步放回零件并在每一步后进行测试 将 sql 放入十六进制文本编辑器(或常规编辑器并替换 带 * 的空格,然后寻找看起来像 空间)【讨论】:
以上是关于SQL0104 令牌 Col_Name 无效的主要内容,如果未能解决你的问题,请参考以下文章
[DB2 for i5/OS]SQL0104 - 令牌?无效。有效标记:) ,., SQL 状态 37000
异常:[IBM][CLI Driver][DB2/LINUXX8664] SQL0104N 意外令牌错误