2016-11-30 112 views
0

我的問題是,我需要創建一個而不是刪除觸發器,以防止產品在過去兩年內被銷售時被刪除。否則應該刪除該產品的所有訂單行。而不是刪除觸發器,以防止銷售產品刪除

我的表是這個樣子:

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

其我的第一個觸發一個讓我此刻是很笨的,但有一個想法,做這樣的事情:

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 

觸發器將觸發任何不在表格中的產品。

有沒有人有任何建議?

+0

你今天早些時候發佈這個問題嗎?我知道我今天早些時候看到這個確切的問題。您的條件邏輯不正確。它需要將訂單表中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