我有包含「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