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
相关产品推荐
相关产品推荐

