触发器:使用table1中的信息更新table2

时间:2014-08-14 20:16:02

标签: sql sql-server sql-server-2008 triggers

使用SSMS 2008.

我有两张桌子:

TABLE1:
PKField (Primary Key)
Field2
Field3

TABLE2:
PKField (Primary Key)
FKField (Foreign Key to Table1.PKField)
Field2
Field3

我需要在TABLE2上创建一个触发器:

每当行INSERTED进入TABLE2(此时Field2和Field3将始终为null),然后根据 TABLE1.Field2和TABLE2.Field3值更新字段TABLE2.Field2和TABLE2.Field3

使用SSMS 2008我该怎么做?我是触发器等的新手......

谢谢!

2 个答案:

答案 0 :(得分:1)

以下是基于示例表格的粗略草图。

create trigger MyTrigger on Tabel2 INSTEAD OF INSERT AS
    Insert Table2 (PKField, FKField, Field2, Field3)
    select i.PKField
        , i.FKField
        , t.Field2
        , t.Field3
    from Inserted i
    join Table1 t on t.PKField = i.FKField

答案 1 :(得分:0)

Here您可以找到更多信息触发器。我建议你在开始做任何事之前先阅读它。

在您的情况下,我相信您应该创建INSTEAD OF INSERT触发器:

  

INSTEAD OF

     

指定执行DML触发器而不是触发SQL语句,   因此,重写触发语句的动作。   无法为DDL或登录触发器指定INSTEAD OF。最多一个   每个INSERT,UPDATE或DELETE语句的INSTEAD OF触发器都可以   在表格或视图上定义。

例如:

--Create an INSTEAD OF INSERT trigger on the view.
CREATE TRIGGER myTrigger on myTable
INSTEAD OF INSERT
AS
BEGIN
  -- do whatever you want here
  -- the code is executed when an insertion is made on the underlying table
END;
GO

您可以找到有关INSTEAD OF INSERT触发器here的更多信息。

我想你唯一的问题是如何引用最初插入基础表的数据?

答案是使用inserted表格 - read more about it