Java 如何更改级联上的特定列值

Java 如何更改级联上的特定列值,java,sql-server,Java,Sql Server,我有三张桌子 Company Department Cost-centers 他们有一对多的关系。就像我的公司可能有多个部门。在我的公司里,有一个专栏是活跃的 如果我将该列从“活动”更改为“不活动”,则与该特定公司关联的部门不应被删除,与该特定部门关联的成本中心也应更改为“不活动” 我正在使用级联删除,但我不想删除,我只想将特定列从活动更新为非活动 您必须为Company表创建更新触发器,如下所示: if update(is_Active) begin update Department

我有三张桌子

Company
Department
Cost-centers
他们有一对多的关系。就像我的公司可能有多个部门。在我的公司里,有一个专栏是活跃的

如果我将该列从“活动”更改为“不活动”,则与该特定公司关联的部门不应被删除,与该特定部门关联的成本中心也应更改为“不活动”


我正在使用级联删除,但我不想删除,我只想将特定列从活动更新为非活动

您必须为Company表创建更新触发器,如下所示:

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

部门中的另一个触发器,以同样的方式更新成本中心。

您可以使用触发器进行以下操作

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