如何在级联上更改特定列值

时间:2017-03-15 06:59:53

标签: java sql-server

我有三张桌子

Company
Department
Cost-centers

他们有一对多的关系。像我公司可能有多个部门。在我的公司中,有一列is_active

如果我将该列从活动状态更改为非活动状态,而该关联部门应该处于非活动状态(未删除),并且与该特定部门关联的成本中心也应更改为非活动状态。

我使用级联删除但我不想删除我只想将该特定列从活动更新为非活动状态。

2 个答案:

答案 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