SQL触发器更新另一个表

时间:2014-07-24 18:49:17

标签: sql sql-server-2008 triggers

我是触发器的新手......任何人都可以帮助我触发器吗?

我有桌子:

Name | Number

当我的表收到像

这样的查询时,我想写一个触发器
update MyTable 
set Number = Number + 1 
where Name = 'myname'

当此查询运行时,触发器应更新另一个表,例如:

Update MyTable 2 
set Column = 'something' 
where Name = 'myname (above name)

非常感谢!

2 个答案:

答案 0 :(得分:7)

您需要在表1上编写UPDATE触发器,以相应地更新表。

请注意:SQL Server中的触发器每行调用一次更新 - 他们在每个语句中称为一次 ,以及内部"伪"表格InsertedDeleted将包含多行,因此您需要在编写触发器时将其考虑在内。

在你的情况下,我写了类似的东西:

-- UPDATE trigger on "dbo.Table1"
CREATE TRIGGER Table1Updated
ON dbo.table1 FOR UPDATE
AS 
BEGIN
    -- update table2, using the same rows as were updated in table1
    UPDATE t2
    SET t2.Column = 'something'
    FROM dbo.Table2 t2
    INNER JOIN Inserted i ON t2.ID = i.ID        
END
GO

诀窍是使用Inserted伪表(包含UPDATE之后的新值 - 它具有与写入触发器的表完全相同的结构 - 这里{{1} }}以基于集合的方式 - 将其加入到dbo.Table1的某个列上,它们是共同的(dbo.Table2或其他)。

答案 1 :(得分:1)

在表1上创建一个触发器以进行更新:

CREATE TRIGGER dbo.update_trigger 
   ON  table1
   AFTER UPDATE
AS 
BEGIN
    DECLARE @Name VARCHAR(50)
    SELECT @Name=Name FROM INSERTED
    Update MyTable 2 
        SET Column = 'something' 
        WHERE Name = @Name
END
GO

试试这个;)