0

我正在尝试使用 nodejs 的 mysql 包为数据库创建触发器。但我得到一个错误说

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在第 1 行的 INSERT ON 'Leave\' 之后在 \'DELIMITER $$ CREATE TRIGGER 'NotificationTrigger' 附近使用的正确语法。

var createNotificationTrigger = {
  query:

    'DELIMITER $$\
    CREATE TRIGGER `NotificationTrigger` \
    After INSERT  ON `Leave` \
    FOR EACH ROW \
    BEGIN \
    Declare fullname  varchar(255); \
    Declare lastname  varchar(255); \
    Declare requestedbyid  int; \
    Declare insertstring varchar(255); \
    Set fullname = ( select Employee.FirstName from Employee where Employee.ID = NEW.RequestedByID); \
    Set lastname =    ( select Employee.LastName from Employee where Employee.ID = NEW.RequestedByID); \
    set fullname = (select  Concat(fullname," ",lastname)); \
    set requestedbyid= (select  New.RequestedByID); \
    set  insertstring = (select Concat("New Leave request from ",fullname , " employee id : ",requestedbyid)); \
    INSERT INTO `Notification` \
    (`Title`,`SeenBy`,`SentByID`,`NotificationTypeID`) \
    VALUES(insertstring, requestedbyid, requestedbyid,2) ; \
    END$$ \
    DELIMITER ;'

};

这就是我的触发器查询的样子。我正在使用:

connection.query(createNotificationTrigger.query,[],(err)=>{//something here});

这应该在我的数据库中创建一个触发器,但会抛出上面提到的错误。该查询在 mysql 工作台中运行良好。

4

1 回答 1

1

根据这个答案,您应该能够通过删除DELIMITER语句来创建触发器而不会出错。我已经使用我自己的触发器和我自己的模式进行了测试,这很有效。

因此,您的代码应修改为以下内容以使其正常工作:

var createNotificationTrigger = {
  query:
    'CREATE TRIGGER `NotificationTrigger` \
    After INSERT  ON `Leave` \
    FOR EACH ROW \
    BEGIN \
    Declare fullname  varchar(255); \
    Declare lastname  varchar(255); \
    Declare requestedbyid  int; \
    Declare insertstring varchar(255); \
    Set fullname = ( select Employee.FirstName from Employee where Employee.ID = NEW.RequestedByID); \
    Set lastname =    ( select Employee.LastName from Employee where Employee.ID = NEW.RequestedByID); \
    set fullname = (select  Concat(fullname," ",lastname)); \
    set requestedbyid= (select  New.RequestedByID); \
    set  insertstring = (select Concat("New Leave request from ",fullname , " employee id : ",requestedbyid)); \
    INSERT INTO `Notification` \
    (`Title`,`SeenBy`,`SentByID`,`NotificationTypeID`) \
    VALUES(insertstring, requestedbyid, requestedbyid,2) ; \
    END'
};
于 2020-04-02T01:11:53.140 回答