繁体   English   中英

sql触发器将列名存储在变量中并将其用于OLD.myvar时在使用SQL触发器时​​出错

[英]sql triggers I have error while storing column name in variable and use it for OLD.myvar in sql triggers

MySQL说:#1054-'OLD'中的未知列'TMPCOL'

BEGIN
DECLARE TOTAL,I INT;
DECLARE CURRENT_CLOUMN VARCHAR(255);
DECLARE TRIGGER_ON_TABLE VARCHAR(255);
DECLARE TRIGGER_OP VARCHAR(255);
DECLARE olddd VARCHAR(255);
DECLARE newwww VARCHAR(255);
SET TOTAL=0;
SET I=0;
SET CURRENT_CLOUMN='atulbaldaniya.com';
SET TRIGGER_ON_TABLE='atulbaldaniya';
SET TRIGGER_OP='UPDATE';
SET olddd='';
SET newwww='';

SELECT COUNT(COLUMN_NAME) INTO  TOTAL  FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = TRIGGER_ON_TABLE ORDER BY ORDINAL_POSITION;
    WHILE I < TOTAL DO
        SELECT COLUMN_NAME INTO CURRENT_CLOUMN FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = TRIGGER_ON_TABLE ORDER BY ORDINAL_POSITION LIMIT I,1;
        SET olddd=OLD.CURRENT_CLOUMN;
        SET newwww=NEW.CURRENT_CLOUMN;
            IF(olddd != newwww) THEN
                INSERT INTO TMP(DATA1, DATA2)VALUES(TOTAL ,CONCAT('Change in ',olddd,' To ',newwww))
            END IF; 
        SET I=I+1;
    END WHILE ;
END

我不想
INSERT INTO TMP(DATA1, DATA2)VALUES(TOTAL ,OLD.ID);
这很好。

我想将列名称存储在变量中,并使用像OLD.MYVAR

我们该怎么做?

您可以将查询构建为字符串,然后准备并执行,类似于:

SET @s = CONCAT('INSERT INTO TMP(DATA1, DATA2) VALUES ("DATA",OLD.',TMPCOL,');');

PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM