我正在尝试重新创建我从T-SQL创建的函数到MySQL,而我在使Trigger工作时遇到了困难。
这是我应该做的: 1.我需要创建一个基于以下格式创建特殊ID的函数: date - 6digit代码,它将是增量的实际ID
这就是我的所作所为:
-- created the table first
DROP TABLE abc
Create table abc
(
IDnumber INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name varchar(32)
)
-- Function
DROP FUNCTION GenerateID
CREATE FUNCTION GenerateID (id int)
RETURNS VARCHAR(10)
RETURN CONCAT(substr((cast(CURDATE() as char(10))),3,2), '-', right(concat('000000', cast( id as char(6) ) ), 6) );
-- create the Trigger
DELIMITER ||
CREATE TRIGGER ID_Insert BEFORE INSERT ON ABC
FOR EACH ROW
BEGIN
UPDATE abc
SET abc.IDNumber = generateID(abc.IDNumber) ;
-- FROM abc
-- INNER JOIN Inserted ON abc.IDNumber = inserted.IDNumber;
END
||
我注释掉了部分--FROM abc和 - INNER JOIN部分,因为这是我在T-SQL中使用的语法。我试着在这里应用它,但是我遇到了语法错误。现在触发器已成功创建,但问题是我现在开始插入记录。
insert into abc (name) values('cammie')
insert into abc (name) values('helios')
etc
我收到错误1442,说'无法使用触发器/函数更新表,因为它已经在调用此函数的语句中使用/ sp
你认为我错过了什么?
答案 0 :(得分:1)
在触发器主体中,只需使用
,而不是尝试更新已更新的表SET NEW.IDNumber = generateID(abc.IDNumber) ;