【发布时间】:2017-07-26 09:52:06
【问题描述】:
我有两张桌子:
产品:
Product ID | Quantity
OrdersLines:
Product ID | Amount --(multiple lines with the same ID)
当然,在我从Products 表中删除产品之前,我需要先从OrdersLines 表中删除所有具有该产品ID 的订单行。
所以我写了一个触发器来做到这一点:
CREATE TRIGGER [dbo].[atbl_Sales_Products_DTrig]
ON [dbo].[atbl_Sales_Products]
FOR DELETE
AS
BEGIN
DELETE FROM atbl_sales_OrdersLines
WHERE ProductID = (SELECT ProductID FROM deleted)
END
但是,当我尝试从 Products 表中删除表单时,它仍然显示:
相关表 (Sales OrdersLines) 中的某些行必须先删除才能删除此行
我在这里做错了什么?
按要求编辑:主要约束:
[dbo].[atbl_Sales_OrdersLines] WITH CHECK ADD CONSTRAINT
[FK_atbl_Sales_OrdersLines_atbl_Sales_Products] FOREIGN KEY([ProductID])
REFERENCES [dbo].[atbl_Sales_Products] ([ProductID])
【问题讨论】:
-
您是否有不想使用cascading delete 的原因?
-
是的,我知道这可以解决问题。但是,我这样做是为了分配。它需要在触发器中解决。
-
触发器(称为
AFTER触发器)在表中删除操作后执行,因此出现错误信息。您需要的是一个INSTEAD OF触发器,要正确处理它们有点棘手。阅读全文:docs.microsoft.com/en-us/sql/relational-databases/triggers/…
标签: sql-server tsql