执行触发器;更新另一个字段

时间:2012-05-22 18:17:07

标签: sql sql-server tsql sql-server-2005

我一直在阅读触发器,我似乎没有找到一个处理我的情况的例子。我的情况很不幸。以前的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

我正在尝试做什么?

1 个答案:

答案 0 :(得分: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