Sql 执行触发器;更新另一个字段
我一直在阅读触发器,但我似乎没有找到一个例子来处理我的情况。我的处境很不幸。以前的DBA将冗余数据分散在整个数据库中 一旦在我的Sql 执行触发器;更新另一个字段,sql,sql-server,tsql,sql-server-2005,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_na
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
我想做的是可能的吗?您当前的触发器假设更新只能影响一行;它还打算使用源表中的任意值(不一定是更新的行!)更新其他两个表中的每一行。您需要使用
inserted
伪表来标识触发触发器的行,并为Org\u Name\u 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
这些表格有什么关系?您真的打算更新其他两个表中的所有行吗?这三张桌子每一张只有一行吗?如果是这样,我会删除另外两个表,转而创建同义词或视图。@AaronBertrand
organiz
的主键为org\u id
other\u table
和other\u table
都有org\u id
作为FK。感谢Aaron,我不确定如何引用插入的伪表,愚蠢地没有指定要更新的值。