2012-02-28 3 views
2

私はReordersテーブルにProductID、ReorderAmount、およびReorder Dateフィールドを持っています。 ProductID、ProductName、ProductDesc、VendorID、QtyOnHand、ReorderLevel、およびReorderAmountというフィールドを持つProductsテーブルもあります。私は2つの異なるテーブルを利用して2つの簡単なトリガーを策定するのに助けが必要です

私が作成したいのは、ReordersテーブルのQtyOnHandがReorderAmountの下に落ちるとき、そしてもちろん注文がまだ行われていないことを確認するたびに、Reordersテーブルにエントリを作成するトリガーです。 QtyOnHandがReorderAmountの上に上がるたびにReordersテーブルのエントリを削除する別のトリガが必要です。

私はこれを行う方法の構文を見てきましたが、私はまだかなり混乱しています。 それは私がこれらが行われているさまざまな方法をたくさん見てきた

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に従うことを試みたが、私は」かどうかわからないんだけど正しい方向に向かうことさえある。

すべてのヘルプは大歓迎です! DELETEが同様に行われた場合、INSERTの実行方法を一度把握していれば、私は興味があります。前もって感謝します! :)

答えて

0

これらをすばやく試してみたら、私は何かを逃したかどうか教えてください。

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 
+0

ほとんどのことがわかりましたが、無効な列名が使用されていました。内部結合はこの問題を解決しました!どうもありがとうございます! – user1096664

関連する問題