0

私はトリガーについて読んでいますが、私の状況を処理する例を見つけていないようです。私の状況は残念です。以前のDBAは、データベース全体に冗長データを分散させていました。

テーブルで会社名が変更されたら、他の複数のテーブルで会社名を更新したいと思いorganizます。私はこれを持っていますが、うまくいかないようです:

CREATE TRIGGER updOrgNameTrigger
ON organiz
AFTER UPDATE
AS

IF UPDATE(Org_Name_1)
BEGIN
    DECLARE @org_name varchar(256)
    SET @org_name = (select Org_Name_1 from organiz)
    UPDATE other_table set Org_Name_1 = @org_name
    UPDATE the_other_table set Org_name_1 = @org_name
END

私がやろうとしていることは可能ですか?

4

1 に答える 1

1

現在のトリガーは、更新が単一の行にのみ影響を与える可能性があることを前提としています。また、他の2つのテーブルのすべての行を、ソーステーブルの任意の値で更新することも意図しています(必ずしも更新された行である必要はありません)。疑似テーブルを使用しinsertedて、トリガーを起動した行を識別し、列の新しい値をプルする必要がありOrg_Name_1ます。このバージョンはどうですか:

CREATE TRIGGER dbo.updOrgNameTrigger
ON dbo.organiz
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE o SET Org_Name_1 = i.Org_Name_1
      FROM dbo.other_table AS o
      INNER JOIN inserted AS i
      ON o.org_id = i.org_id;

    UPDATE o2 SET Org_Name_1 = i.Org_Name_1
      FROM dbo.the_other_table AS o2
      INNER JOIN inserted AS i
      ON o2.org_id = i.org_id;
END
GO
于 2012-05-22T18:19:55.440 に答える