SQL Anywhere 16 BEFORE INSERT触发器引用新行字段报错求助
解决SQL Anywhere 16 BEFORE INSERT触发器引用新行字段的问题
你的报错原因是错误地将NEWTRANVAL当作表来使用——在REFERENCING NEW AS NEWTRANVAL子句中,NEWTRANVAL是新插入行的行级变量别名,不是实际的数据库表,因此不能用SELECT ... FROM NEWTRANVAL来读取字段值,直接通过别名引用字段即可。
修正后的触发器代码如下:
CREATE TRIGGER TRANVALDateGL BEFORE INSERT ON TRANVAL REFERENCING NEW AS NEWTRANVAL FOR EACH ROW BEGIN IF NEWTRANVAL.GLSTATUS IN (10223716, 10223718, 10223719) THEN SET NEWTRANVAL.DateGL = SQLToJulian(GetDate()); ELSE SET NEWTRANVAL.DateGL = 0; END IF; END;
关键修改说明:
- 移除了不必要的
DECLARE @GLStatus变量和SELECT语句,直接通过NEWTRANVAL.GLSTATUS访问新行的字段值 - 使用
IN运算符简化多值判断,让代码更简洁 - 保持
REFERENCING NEW AS NEWTRANVAL的定义,直接通过该别名修改DateGL字段值(这正是BEFORE触发器允许在插入前修改新行的核心用法)
内容的提问来源于stack exchange,提问作者Seated
相关产品推荐
相关产品推荐

