2016-11-30 101 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