我有三张桌子
Company
Department
Cost-centers
他们有一对多的关系。像我公司可能有多个部门。在我的公司中,有一列is_active
。
如果我将该列从活动状态更改为非活动状态,而该关联部门应该处于非活动状态(未删除),并且与该特定部门关联的成本中心也应更改为非活动状态。
我使用级联删除但我不想删除我只想将该特定列从活动更新为非活动状态。
答案 0 :(得分:2)
您必须为Company表创建一个UPDATE触发器,如下所示:
if update(is_Active) begin
update Department set is_Active=i.is_Active
from Department as d inner join inserted as i
on d.CompanyID = i.ID
where d.CompanyID = i.ID and d.is_Active<>i.is_Active
end
部门的另一个触发器,以同样的方式,更新Cost_Centers。
答案 1 :(得分:0)
您可以使用触发器来执行以下操作
IF EXISTS (SELECT name FROM sys.objects
WHERE name = 'updateOtherColumns' AND type = 'TR')
DROP TRIGGER updateOtherColumns;
GO
CREATE TRIGGER updateOtherColumns
ON Company
AFTER UPDATE
AS
IF UPDATE(is_active)
BEGIN
UPDATE D
SET D.is_active= C.is_active
FROM Departments D INNER JOIN Company C
ON D.id=C.dept_id and D.is_active <>C.is_active
--first update departments and then cost-centers
UPDATE CC
SET CC.is_active= D.is_active
FROM Departments D INNER JOIN Cost_Centers CC
ON D.cost_center_id=CC.id and D.is_active <>CC.is_active
END
GO