【问题标题】:Can I have multiple query statements inside an If statement of sql trigger?我可以在 sql 触发器的 If 语句中有多个查询语句吗?
【发布时间】:2019-04-25 15:19:17
【问题描述】:
DECLARE **cusname** varchar;

IF(New.BecomeVolunteer = 'Yes') 
THEN 
SELECT CusName INTO cusname FROM customer WHERE CusID = NEW.CusID;

INSERT INTO staff (StaffName, StaffTel, StaffDOB, Availability, Duties, [enter image description here][1]StaffType)
VALUES
(**cusname**, '07589634598', '1965-05-13', 'Tue,Wed,SatPM','Collecting Tickets,Ushering Customers to Seats,Looking after the Artists', 'Volunteer');
END IF

我有一个表员工,我想从“客户”表中获取“客户名称”并将其设置为变量“客户名称”。然后我想在我的 Insert 语句中使用该变量作为“StaffName”属性的值

我还没有过多地使用触发器,但我了解使简单语句起作用的基本语法,但这一个不断给出错误。如果有人能帮我弄清楚这里出了什么问题,我将不胜感激。

IF(New.BecomeVolunteer = 'Yes') 
THEN 
INSERT INTO staff (StaffName, StaffTel, StaffDOB, Availability, Duties, StaffType)
VALUES
('Jaamees', '07589634598', '1965-05-13', 'Tue,Wed,SatPM','Collecting Tickets,Ushering Customers to Seats,Looking after the Artists', 'Volunteer');
END IF

下面的语句可以正常工作,但上面的语句不能正常工作(当我想添加一个变量时)。

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: sql triggers phpmyadmin database-trigger


【解决方案1】:

IF 默认使用单个语句。如果要在IF 中执行多个语句,请使用BEGIN...END

IF (New.BecomeVolunteer = 'Yes') 
BEGIN
    SELECT CusName INTO cusname FROM customer WHERE CusID = NEW.CusID;
    INSERT INTO staff (StaffName, StaffTel, StaffDOB, Availability, Duties, StaffType)
    VALUES
        (cusname, '07589634598', '1965-05-13', 'Tue,Wed,SatPM',
        'Collecting Tickets,Ushering Customers to Seats,Looking after the Artists',
        'Volunteer');
END;

【讨论】:

  • 谢谢蒂姆。我认为它的变量声明似乎会导致问题,因此即使我将 IF 替换为 BEGIN,它仍然无法运行。我是否以正确的方式声明和设置变量?
  • 试试DECLARE cusname varchar(100)
【解决方案2】:

您可以在一个语句中完成所有操作:

IF (New.BecomeVolunteer = 'Yes') THEN 
    INSERT INTO staff (StaffName, StaffTel, StaffDOB, Availability, Duties, StaffType)
        SELECT c.cusname, '07589634598', '1965-05-13', 'Tue,Wed,SatPM', 'Collecting Tickets,Ushering Customers to Seats,Looking after the Artists', 'Volunteer')
        FROM customer c
        WHERE c.CustId = NEW.CusID

而且,您甚至可以删除IF

    INSERT INTO staff (StaffName, StaffTel, StaffDOB, Availability, Duties, StaffType)
        SELECT c.cusname, '07589634598', '1965-05-13', 'Tue,Wed,SatPM', 'Collecting Tickets,Ushering Customers to Seats,Looking after the Artists', 'Volunteer')
        FROM customer c
        WHERE c.CustId = NEW.CusID AND
              New.BecomeVolunteer = 'Yes';

【讨论】:

    猜你喜欢
    • 2013-01-28
    • 1970-01-01
    • 2020-09-22
    • 2015-12-07
    • 2020-02-15
    • 1970-01-01
    • 2016-04-12
    • 2010-10-19
    • 1970-01-01
    相关资源
    最近更新 更多