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

您当前的触发器假定更新只能影响单行;它还打算用源表中的任意值更新其他两个表中的每一行(不一定是更新的行!)。您需要使用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 回答