2014-07-24 261 views
2

我是新手触发器...任何人都可以用触发器帮我吗?SQL触发器更新另一个表

我有表:

Name | Number 

我想在我的桌子收到类似

update MyTable 
set Number = Number + 1 
where Name = 'myname' 

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

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

非常感谢!

+0

我使用sql server 2008 – MeTa

+0

在这种情况下添加了'sql-server-2008'标签... –

回答

6

你需要写一个UPDATE触发器表1,更新相应的表2。

注意:在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后的新价值 - 它具有完全相同的结构,你的表触发器是写在 - 这里dbo.Table1)在基于集合的时尚 - 将它加入您的dbo.Table2他们有一些共同的列(ID什么的)。

+0

非常感谢! – MeTa

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 

试试这个;)

+0

以及我如何识别“where”变量? 开始后 – MeTa

+0

decalrea一个变量,然后“select @ name = name from inserted”,并在你的where子句中使用it.need示例? – Farrokh

+0

我做到了!非常感谢您的宝贵时间! – MeTa

相关问题