0

我正在尝试将我从 T-SQL 创建的函数重新创建到 MySQL,但我在使触发器工作时遇到了困难。

这是我应该做的: 1. 我需要创建一个函数,该函数将根据这种格式创建一个专门的 ID:日期 - 6 位代码,这将是增量的实际 ID

  1. 接下来我需要创建触发器,每当我尝试插入新记录时,它将调用我创建的函数来生成 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 的语句中使用”

你觉得我错过了什么?

4

1 回答 1

1

在您的触发器正文中,不要尝试更新已经更新的表,只需使用

SET NEW.IDNumber = generateID(abc.IDNumber) ;
于 2013-05-31T20:13:15.087 回答