【发布时间】:2015-05-06 20:05:49
【问题描述】:
我正在尝试为我的表实现一些触发器
其中两个表是ORDERS(有订单)和ORDERS_ITEMS(每个订单都有项目),当ORDER 中没有更多ITEMS 时,我想删除ORDER。
我希望我的触发器看起来像这样
CREATE TRIGGER DELETE_ORDER_WHEN_NO_ITEMS
INSTEAD OF DELETE
ON ORDER
DECLARE rowcount int;
BEGIN
// First detemine if this is the last item in the ORDER
SELECT Count(*)
INTO rowcount
FROM ORDER_ITEM
WHERE ORDER_ITEM.ItemNumber = old:ItemNumber;
// Delete ITEM row
DELETE ORDER_ITEM
WHERE ORDER_ITEM.ItemNumber = old:ItemNumber;
// Last ITEM in ORDER delete the whole ORDER
IF (rowcount = 1) THEN
DELETE ORDER
WHERE ORDER.OrderNumber = old:OrderNumber;
END IF
END;
我不确定如何在 SQL Server 中编写此代码,并且我从书中获得了算法,但无法在 SQL Server 上运行它。
【问题讨论】:
-
我只是想知道你为什么要在数据库上这样做?这听起来像是一个业务规则,并且在代码中处理起来可能更容易和更易于管理。
-
请显示您的表格布局。我不清楚为什么名为
Order的表会有一个名为ItemNumber的列。我希望外键关系位于OrderId之类的列上。
标签: sql sql-server triggers