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