2016-12-05 39 views
1
DELIMITER $$ 
CREATE TRIGGER `tr_tblEmployee_Update` BEFORE UPDATE ON `tblEmployee` FOR EACH ROW 
BEGIN 

DECLARE id int; DECLARE OldGender varchar(10); DECLARE NewGender varchar(10); DECLARE NewName varchar(50); DECLARE OldName varchar(50); 
DECLARE OldSalary int; DECLARE NewSalary int; DECLARE OldID_Dep int; DECLARE NewId_Dep int; 
DECLARE AuditString varchar(300); 

    SET id = ID_Employee; SET NewGender = Gender; SET NewName = Name; SET NewSalary = Salary; SET NewID_Dep = ID_Dep; 
    SET OldGender = Gender; SET OldName = Name; SET OldSalary = Salary; SET OldID_Dep = ID_Dep; 

    SET AuditString = concat('Employee with id = ',id,' changed: ') 
    IF(OldName<>NewName) 
     SET AuditString = concat(AuditString, 'Name from ',OldName,' to ',NewName); 
    IF(OldGender<>NewGender) 
     SET AuditString = concat(AuditString, ' Gender from ',OldGender,' to ',NewGender); 
    IF(OldSalary<>NewSalary) 
     SET AuditString = concat(AuditString, ' Salary from ',OldName,' to ',NewName); 
    IF(OldDep<>NewDep) 
     SET AuditString = concat(AuditString, ' Department from ',OldName,' to ',NewName); 

    INSERT INTO tblemployeeaudit(AuditData) VALUES(AuditString); 
END 
$$ 
DELIMITER ; 

你好,我想用concat函数使用同一个变量(AuditString)多次,但每次我试图我得到一个错误去做吧。如何使用功能CONCAT相同的变量多于一次()的MySQL

错误 - #1064 - 您的SQL语法错误;检查对应于您MariaDB的服务器版本正确的语法 使用手动 附近“IF(OLDNAME!=新名称) SET AuditString = CONCAT(AuditString,‘名称从’,01” ......在第12行

+0

你使用MySQL或MS SQL Server? (不要标记不涉及的产品。) – jarlh

+0

发布错误消息以及 – Rahul

+0

我正在使用MySql,抱歉,我第一次在这里发帖。 –

回答

0

你缺少;分号线IF(OldName<>NewName)

之前同样,你IF语法看上去不正确我。它应该是

IF(OldName<>NewName) THEN 
    SET AuditString = concat(AuditString, 'Name from ',OldName,' to ',NewName); 
END IF; 
+0

非常感谢你,我试了1个小时,没有注意到丢失的分号。 –

0

这是最后的解决方案,以防其他人遇到同样的问题。

DELIMITER $$ CREATE TRIGGER tr_tblEmployee_Update BEFORE UPDATE ON tblEmployee FOR EACH ROW
BEGIN

DECLARE ID INT; DECLARE OldGender varchar(10); DECLARE NewGender varchar(10); DECLARE NewName varchar(50); DECLARE OldName varchar(50); DECLARE OldSalary int; DECLARE NewSalary int; DECLARE OldID_Dep int; DECLARE NewId_Dep int; DECLARE AuditString varchar(300);

SET id = OLD.ID_Employee; SET NewGender = NEW.Gender; SET NewName = NEW.NAME; SET NewSalary = NEW.Salary; 
SET OldGender = OLD.Gender; SET OldName = OLD.NAME; SET OldSalary = OLD.Salary; 

SET AuditString = concat('Employee with id = ',id,' changed: '); 
IF(OldName<>NewName) THEN 
    SET AuditString = concat(AuditString, 'Name from ',OldName,' to ',NewName); 
END IF; 
IF(OldGender<>NewGender) THEN 
    SET AuditString = concat(AuditString, ' Gender from ',OldGender,' to ',NewGender); 
END IF; 
IF(OldSalary<>NewSalary) THEN 
    SET AuditString = concat(AuditString, ' Salary from ',OldSalary,' to ',NewSalary); 
END IF;  
INSERT INTO tblemployeeaudit(AuditData) VALUES(AuditString); 

END

相关问题