繁体   English   中英

SQL Server:使用“if”条件更新触发器

[英]SQL Server : update trigger with 'if' condition

我正在尝试实现一个SQL Server触发器,以便在表A中使用if条件更新时更新表B中的行。

表A:

id_AA
status
desc1
desc2

表B:

id_BA
desc3
desc4

逻辑是这样的:

if user update table A set status == success
update B: when id_BA == id_AA
set desc3 = desc1
desc4 = desc2

我不是100%清楚你的逻辑,但我认为你正在寻找这样的东西:

CREATE TRIGGER dbo.TableA_Update 
ON dbo.TableA
FOR UPDATE
AS
BEGIN
    UPDATE  TableB
    SET     Desc3 = i.Desc1,
            Desc4 = i.Desc2
    FROM    TableB b
            INNER JOIN inserted i           
                ON i.ID_AA = b.ID_BA        -- MATCH CRITERIA IN QUESTION
                AND i.Status = 'success'    -- NEW STATUS IS "SUCCESS"
            INNER JOIN deleted d
                ON d.ID_AA = i.ID_AA
                AND d.Status != 'success'   -- PREVIOUS STATUS WAS NOT "SUCCESS"
END

编辑

如果TableB没有相应的行,您可能需要考虑使用MERGE

CREATE TRIGGER dbo.TableA_Update 
ON dbo.TableA
FOR UPDATE
AS
BEGIN
    ;WITH Updated AS
    (   SELECT  i.ID_AA, i.Desc1, i.Desc2
        FROM    inserted i
                INNER JOIN deleted d
                    ON d.ID_AA = i.ID_AA
                    AND d.Status != 'success'   -- PREVIOUS STATUS WAS NOT "SUCCESS"
        WHERE   i.Status = 'success'
    )
    MERGE INTO TableB USING Updated ON ID_AA = ID_BA
    WHEN MATCHED THEN
        UPDATE
        SET Desc3 = Desc1,
            Desc4 = Desc2
    WHEN NOT MATCHED THEN
        INSERT (ID_BA, Desc3, Desc4) VALUES (ID_AA, Desc1, Desc2);
END

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM