加入多表Sql触发器

Posted

技术标签:

【中文标题】加入多表Sql触发器【英文标题】:Joining multiple table Sql trigger 【发布时间】:2015-09-02 06:48:15 【问题描述】:

您好,我是 SQL 触发器的新手。因为我在网上尝试和搜索,我没有找到任何明确的结果。 所以这是我的问题。 我有三张桌子:

表 1:

ID  NAME (columns )
1   prabhu

表 2:

Id  COUNTRY (columns )
1   India

如果 table2 中发生插入/更新之类的事情,我希望将其发送到日志表 SQL(DB2) 触发器必须执行以下操作,结果应该在这样的日志表中

日志表:

ID  NAME     COUNTRY    
1   prabhu   India 

非常感谢您的帮助。

【问题讨论】:

你必须在这里阅读db2手册,我们不会编写你的代码(免费)。 【参考方案1】:

试试这个,

-- Create tables
create table table1(id int, empName varchar(20));
create table table2(id int, country varchar(20));
create table logtable(id int, empName varchar(20), country varchar(20));

-- Create trigger
CREATE TRIGGER logtableAfterInsert ON table2
after INSERT,DELETE,UPDATE
AS
BEGIN
    declare @empid int;
    declare @empname2 varchar(20);
    declare @empcountry varchar(20);

    select @empid=i.id from inserted i;
    select @empcountry=i.country from inserted i;
    select @empname2=tbl1.empName from table1 tbl1 where tbl1.id=@empid;

    insert into logtable values(@empid,@empname2,@empcountry);

    PRINT 'Inserted'
END
GO

然后插入值,

insert into table1 values(1, 'prabhu');
insert into table2 values (1, 'India');

检查结果,

select * from table1;
select * from table2;
select * from logtable;

希望这能解决...

顺便说一句,您需要添加外键约束。

【讨论】:

它很好,但这里缺少 db2 语法.. 这将在 db2 环境中工作会很棒.. 非常好的解决方案 Mr.Raja.. 我已经按照 db2 进行了转换并且工作正常:如下:【参考方案2】:
CREATE OR REPLACE TRIGGER logtableAfterUpdate
AFTER UPDATE ON table2 
REFERENCING NEW AS NAUDIT OLD AS OAUDIT 
FOR EACH ROW MODE DB2SQL 
--BEGIN --ATOMIC 
insert into logtable
values(
    (select id from table2 tbl2 where tbl2.id =OAUDIT.id),
    (select empName from table1 tbl1 where tbl1.id=(select id from table2 tbl2 where tbl2.id =OAUDIT.id)),
    (select country from table2 tbl2 where tbl2.id =OAUDIT.id)
);
--END;

【讨论】:

以上是关于加入多表Sql触发器的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句中两个表的连接

SQL Server数据库多表关联如何更新?

SQL 视图 局部变量 全局变量 条件语句 事务 触发器

请问sqlserver中的两个表怎么进行关联

SQL数据库怎么进行多表级联更新,求个存储过程

SQL触发器一触发就插入多条记录