如何插入一个表并使用相同的sql语句更新另一个表?

时间:2010-12-15 17:06:52

标签: sql

在一个语句中执行此操作的要求是由于程序如何处理sql语句。 sql语句存储在另一个表的列中,并通过记录集上的open执行。如果语句中有分号,则open响应错误的无效字符。

场景:在某些情况下,我想更新数据库A中一条记录中的特定字段,并通过插入在日志表中记录该更改的事实。

以下是使用两个语句的示例:

update data_table a set field1='new value' where identifier=10;

insert into log_table (action_taken) 
values('record ' || a.identifier || ' had field1 changed to ' || a.field1);

有没有办法做到这一点?

4 个答案:

答案 0 :(得分:3)

将它们放在存储过程中并执行调用存储过程。

答案 1 :(得分:2)

我认为你正在寻找触发器。在不知道你正在使用什么数据库的情况下,我只能猜测。

以下是有关MySQL触发器的信息。

触发器绑定到表以启动特定事件,例如INSERT,UPDATE或DELETE。然后,触发器可以运行一个或多个SQL语句。

以下是您创建trigger

的方法

答案 2 :(得分:0)

如果您使用java或.net这两个SQL API支持sql批处理命令,请对SGDB进行批量调用,您可以执行您已完成的操作。

update data_table a set field1='new value' where identifier=10;
GO
insert into log_table (action_taken) 
values('record ' || a.identifier || ' had field1 changed to ' || a.field1);
GO

但是如果你要在同一时间同时完成这两项操作,你应该接受krefftc的回答,因为这是最好的方法

答案 3 :(得分:0)

如果您的数据库恰好是Oracle,那么如果由于某种原因您不能/不想创建存储过程,则可以使用匿名PL / SQL块:

BEGIN
 update data_table a set field1='new value' where identifier=10;

 insert into log_table (action_taken) 
  values('record ' || a.identifier || ' had field1 changed to ' || a.field1);
END;