2016-11-30 10 views
0

私の問題は、過去2年間に販売された製品が削除されないようにするためのトリガーを作成する必要があることです。それ以外の場合は、製品のすべての注文ラインで長い間削除する必要があります。商品の販売中に削除を防止するトリガーを削除するのではなく

私のテーブルはこのような何かを見て:私は、現時点ではかなり無知ですが、このような何かを行うためのアイデアを持っている

PRODUCT_TABLE: ID, price 
ORDERITEM_TABLE: ID, Quantity, productid, ordersid 
ORDERS_TABLE: ID, Orderdate 

私の最初のトリガーのその1を:

CREATE TRIGGER productdelete 
ON product 
INSTEAD OF DELETE 
AS 
BEGIN 
DECLARE @today datetime, @orderdate date 
SET @today = GetDate() 
IF NOT EXISTS(SELECT productid from product where productid = (select productid from deleted) and (SELECT orderdate from orders) > (SELECT DATEADD(YEAR, -2, @today))) 
    raiserror ('Unable to delete', 16,1) 
    rollback tran 
END 

トリガはテーブルにないproductidで起動します。

誰にも提案はありますか?

+0

今日この質問を投稿していませんか?今日私はこの正確な質問を見ました。条件ロジックが正しくありません。 OrderテーブルのOrderDateと今日の日付を比較する必要があります。 –

答えて

0

INSTEAD OFトリガーを使用しているため、トランザクションをロールバックする必要はありません。

トリガーコードで条件を満たしている場合は、単にDELETEを実行し、そうでない場合は何もしないでください。

0

トリガーは暗黙のトランザクションで実行されます。

CREATE TRIGGER productdelete 
ON product 
INSTEAD OF DELETE 
AS 
BEGIN 

    IF EXISTS(SELECT NULL from deleted) and .. 
     raiserror ('Unable to delete', 16,1) 
    ELSE IF 
     delete from yourtable where xx in (select yy from deleted) 

END 
関連する問題