You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DB2表以数字为列名执行INSERT语句报错SQL0104N如何解决

报错根因

  • DB2中纯数字属于非标准SQL标识符,直接写在列名位置会被解析为数值常量,无法被识别为列引用,因此触发SQL0104N语法错误。如果建表时使用了纯数字作为列名,引用时必须用双引号包裹该列名,才能被DB2识别为合法列。
  • 注意:DB2中被双引号包裹的标识符大小写敏感,需要和建表时的列名大小写完全一致,否则会触发列不存在的错误。

修复方案

语法修正

将插入语句中的数字列名用双引号包裹即可,修正后的代码如下:

var addclient = "insert into clients (NAME, EMAIL, PHONE_NUMBER, TRAINER_NAME, \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\") values ('" + name + "', '" + email + "', '" + phonenumber + "', '" + req.session.username + "', '" + monday + "', '" + tuesday + "', '" + wednesday + "', '" + thursday + "', '" + friday + "', '" + saturday + "', '" + sunday + "')";

安全优化

当前直接拼接SQL字符串的写法存在SQL注入风险,建议改用参数化查询实现相同逻辑,参考写法如下:

// 用?作为参数占位符
const addclient = 'insert into clients (NAME, EMAIL, PHONE_NUMBER, TRAINER_NAME, "1", "2", "3", "4", "5", "6", "7") values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
// 按顺序传入参数值
const params = [name, email, phonenumber, req.session.username, monday, tuesday, wednesday, thursday, friday, saturday, sunday];
// 调用ibm_db的执行方法时传入params数组即可

内容的提问来源于stack exchange,提问作者developerg1000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:54:05