我在Order:Stops之间有一个很多关系。
Order.OrderId是主键。 Order.FileNumber是我想删除Stops by的列。
Stop.OrderId是外键,引用Order的主键。一个订单可以有很多停止。 Stop.StopId是Stop的主键。
首先删除订单,SQL在外键约束上出现错误。首先删除停止,然后删除相应的订单,不会导致任何错误。
如果我想删除我知道Order.FileNumber的Stops,SQL语句会是什么样子?
我假设的事情如下:
DELETE FROM [dbo].[Stop] Stop LEFT JOIN [dbo].[Order] Ord
WHERE Ord.DriverNo = 123 AND Ord.FileNo = 456789
AND Ord.OrderId = Stop.OrderId
GO
但没有任何效果。我们正在使用SQL Server 2012。
答案 0 :(得分:1)
您可以使用INNER JOIN
DELETE S
FROM [dbo].[Stop] S
INNER JOIN [dbo].[Order] Ord
ON Ord.OrderId = S.OrderId
WHERE Ord.DriverNo = 123
AND Ord.FileNo = 456789
您可以使用ON DELETE CASCADE
进行级联删除,同时使用ALTER TABLE ...
语句定义外键(OR),以确保删除父记录中的相关记录表也被删除(或)删除操作将被级联。