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

AS400 - 令牌“!”无效

异常:[IBM][CLI Driver][DB2/LINUXX8664] SQL0104N 意外令牌错误

验证 Azure 广告访问令牌时签名无效,但 id 令牌有效

APNS:无效令牌导致所有后续推送通知失败

加载操作中的 BigQuery 错误:令牌无效 - 令牌无效:无状态令牌已过期