Мне нужна помощь в формулировке двух простых триггеров с использованием двух разных таблиц - PullRequest
2 голосов
/ 29 февраля 2012

У меня есть таблица переупорядочений с полями ProductID, ReorderAmount и Reorder Date.У меня также есть таблица «Продукты» с полями «ProductID», «ProductName», «ProductDesc», «VendorID», «QtyOnHand», «ReorderLevel» и «ReorderAmount».

Я хочу создать триггер, который будет создавать запись в таблице «Переупорядочения» всякий раз, когдаQtyOnHand из таблицы «Продукты» опускается ниже ReorderAmount, и, конечно, проверяется, чтобы убедиться, что заказ еще не размещен.Затем я хочу другой триггер, который будет удалять записи из таблицы Reorders всякий раз, когда QtyOnHand поднимается выше ReorderAmount.

Я искал синтаксис о том, как это сделать, но я все еще в замешательстве.Похоже, что мне нужно сделать ...

CREATE TRIGGER trReorder ON Products /*Not sure if I should 
     use Reorders instead of Products*/

IF EXISTS (SELECT * FROM Products WHERE QtyOnHand < ReorderAmount)

FOR
INSERT INTO Reorders
(ProductID, ReorderAmount, ReorderDate) VALUES (/*Not sure how to get
  it to pull the ProductID and ReorderAmount from the specific Product
  that was edited and how to get the current date*/)

Я видел много разных способов, как это делается, и я пытался следовать простейшему, но я не уверен, если яЯ даже в правильном направлении.

Любая помощь очень ценится!Мне также любопытно, если когда-нибудь я пойму, как сделать ВСТАВКУ, если УДАЛЕНИЕ выполняется аналогичным образом.Заранее спасибо!:)

1 Ответ

0 голосов
/ 29 февраля 2012

Просто быстро взбил их, дайте мне знать, если я что-то пропустил.

CREATE TRIGGER [dbo].[trReorder]
   ON  [dbo].[Products]
   AFTER INSERT, UPDATE
AS 
BEGIN

    SET NOCOUNT ON;

    IF EXISTS(  SELECT p.ProductID 
                FROM Products p 
                INNER JOIN inserted i 
                ON p.ProductID = i.ProductID
                WHERE p.ProductID = i.ProductID 
                AND p.QtyOnHand <= p.ReorderAmount)
    BEGIN

        INSERT INTO dbo.Reorders
        SELECT p.ProductID, p.ReorderAmount, GETDATE()
        FROM Products p
        INNER JOIN inserted i
        ON p.ProductID = i.ProductID
        WHERE p.ProductID = i.ProductID
        AND p.ProductID NOT IN (SELECT ProductID FROM dbo.Reorders)

    END

END


CREATE TRIGGER [dbo].[trDelReorder]
   ON  [dbo].[Products]
   AFTER INSERT, UPDATE
AS 
BEGIN

    SET NOCOUNT ON;

    IF EXISTS(  SELECT p.ProductID 
                FROM Products p 
                INNER JOIN inserted i 
                ON p.ProductID = i.ProductID
                WHERE p.ProductID = i.ProductID 
                AND p.QtyOnHand > p.ReorderAmount)
    BEGIN

        DELETE 
        FROM dbo.Reorders
        FROM dbo.Reorders r
        INNER JOIN inserted i
        ON r.ProductID = i.ProductID

    END

END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...