-1

テーブルAでif条件を使用して更新するときに、テーブルBの行を更新するSQLServerトリガーを実装しようとしています。

表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
4

1 に答える 1

1

私はあなたの論理について 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
于 2012-09-25T14:28:35.303 に答える