前言

需求:当主数据状态更新为无效时,同时将关系表中的关联记录修改成无效状态。

为什么要From inserted去查询主键和状态?

在 SQL Server 中,触发器使用 inserted 和 deleted 临时表来引用发生 INSERT、UPDATE 或 DELETE 操作的行。这两个临时表提供了对受影响行的访问。在触发器中,inserted 表包含了插入或更新后的新值,而 deleted 表包含了更新或删除前的旧值。

对于触发器中的 INSERT 操作,只有 inserted 表被填充。对于触发器中的 UPDATE 操作,inserted 表包含新值,而 deleted 表包含旧值。对于触发器中的 DELETE 操作,只有 deleted 表被填充。

触发器编写

CREATE TRIGGER ORG_INACTIVE_Trigger
    ON e_org_attribute
    AFTER UPDATE
              AS
                  BEGIN
          SET NOCOUNT ON;

IF UPDATE(party_status_cd)
    BEGIN
       DECLARE @NewPartyStatus NVARCHAR(255);
       DECLARE @PrimaryKey INT; -- 假设主键的数据类型是 INT,根据实际情况修改数据类型

SELECT @NewPartyStatus = i.party_status_cd,
       @PrimaryKey = i.integration_id
FROM inserted  i;

IF @NewPartyStatus = 'INACTIVE'
BEGIN
-- 失效站点数据
UPDATE central_site_pending
SET loaddt = NULL,
    status = '无效',
    end_time = CAST ( GETDATE( ) AS DATE ),
    update_by = 'ORGINACTIVE',
    update_time = CONVERT ( VARCHAR, GETDATE( ), 120 )
WHERE
    (station_code = @PrimaryKey OR center_code=@PrimaryKey)
  AND status = '有效';
END
    END
END;
12-26 19:11