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