mysql / adventureworks数据库/触发器问题

时间:2018-11-18 19:49:16

标签: mysql adventureworks

下午好,我在尝试理解课堂上的这个问题时遇到了一些麻烦。此作业的目的是通过满足特定条件时启动的触发器在数据输入周围添加参数。

由于仓储限制,需要将超过800个单位的库存发送到外部存储站点并分别进行跟踪。已要求您监视更新何时会超出此边界,以便可以在生产会议中解决。 为Production.ProductInventory表编写一个标题为“ tgrExcessInventory”的触发器,以确保数量不能超过800个单位。这是第一步。 修改步骤1中创建的触发器,以仅在“数量”列已更新时执行其检查代码。我成功创建了触发器,但是在了解如何修改触发器时遇到了麻烦。到目前为止,这就是我所拥有的。我在这里还看到了其他一些与此问题类似的帖子,但是对它所做的修改却没有看到。我觉得这有点小失踪。据我了解,我需要写一条变更声明吗?

CREATE TRIGGER tgrExcessInventory
on Production.ProductInventory
FOR UPDATE
AS
IF EXISTS
    (SELECT 'True'
    FROM Inserted i
    JOIN Deleted d
            ON i.productID = d.ProductID
            AND i.locationID = d.LocationID
            WHERE (d.quantity + i.quantity) >= 800 OR 
            i.quantity >=800

    )Begin
    RAISERROR('Cant increase supply where units would be over 800 
    units',16,1)
            ROLLBACK TRAN
    END

然后我做了alter函数

      ALTER TRIGGER [Production].[tgrExcessInventory]
      on [Production].[ProductInventory]
      FOR UPDATE
      AS
      IF EXISTS
      (SELECT 'True'
      FROM Inserted I
       JOIN Deleted D
            ON i.Quantity = d.quantity
            AND i.Quantity = d.Quantity
            WHERE (d.quantity + i.quantity) >= 800 OR 
            i.quantity >=800

    )Begin
    RAISERROR('Cant increase supply where units would be over 800 units',16,1)
            ROLLBACK TRAN
    END

似乎可以工作?我相信我做对了,谢谢您的宝贵时间

1 个答案:

答案 0 :(得分:0)

如果您在此处阅读:https://dba.stackexchange.com/questions/193219/alter-procedure-in-mysql

关于ALTER PROCEDURE

  

此语句可用于更改存储过程的特征。 ALTER PROCEDURE语句中可以指定多个更改。但是,您不能使用此语句更改参数或存储过程的正文 ;要进行此类更改,您必须使用DROP PROCEDURECREATE PROCEDURE删除并重新创建过程

如果是次要更改,则可以使用alter语句轻松更改过程。如果要进行较大的更改,则应使用SHOW CREATE PROCEDURE tgrExcessInventory然后进行更改,删除现有过程DROP PROCEDURE IF EXIST tgrExcessInventory并使用所做的更改运行CREATE PROCEDURE语句