我有包含“columnname”字段的表“mytable”,这是mytable2中列的名称。Mysql触发器,声明一个变量并将其用作列名称
我用这一个选择:
SET @DptScn = (SELECT columnname FROM mytable WHERE tablename = 'CustomTableName' AND fieldlabel = 'CustomField');
SET @identifiedid=144;
,但是,当我尝试:
SELECT @DptScn FROM mytable2 WHERE identifiedid = @identifiedid;
这给我场的不是内容而是containted到变量@DptScn名称。 ..
有什么建议吗? 我不能使用预处理语句,因为我在一个触发器是...
UPDATE:
正如spencer7593我创建一个程序提示:
DROP PROCEDURE IF EXISTS p_t;
DELIMITER $$
CREATE PROCEDURE p_t (IN DptTcn VARCHAR(255), IN tid INT, OUT tT INT)
BEGIN
SET @DptTcn = DptTcn;
SET @tid = tid;
SET @sql = CONCAT('SELECT @DptTcn FROM mytable3 WHERE tid = @tid');
PREPARE stmt FROM @sql;
EXECUTE stmt;
END$$
DELIMITER ;
那我试试吧:
SET @DptTcn = (SELECT columnname mytable WHERE tablename = 'CustomTableName' AND fieldlabel = 'CustomField');
SET @identifiedid=145;
CALL proc_ticket(@DptTcn, @identifiedid, @DptT);
但是我收到一个:
#2014 - Commands out of sync; you can't run this command now
没有。没有准备好的陈述没办法。 – fancyPants
'SET @sql = CONCAT('SELECT',@ DptTcn,'FROM mytable3 WHERE tid =',@ tid);'这就是您需要构建SQL语句的方式;您的过程中的SQL文本无效;使用MySQL用户变量代替标识符是无效的。列名称)在SQL语句中。 – spencer7593
我改变了,但问题仍然存在(命令不同步) – MiPnamic