0

经过一番思考,完全重新编辑了这个。最初我希望与单独的 MERGE 语句结合使用,但忘记了。需要明确的是,这不是一个更新。如果找不到现有的匹配记录,我想添加一条新记录。

假设mytable拥有列foo, bar, baz。在哪里(如果出于性能考虑)foobar一起唯一标识记录。

a) 如果不是foobar则插入foo, bar,baz

b) 否则,如果foo且不等于insert , ,barbaz<new>baz<old>foobarbaz<new>

c)否则,如果所有三个都匹配,则什么也不做

请注意,这b同样是一条新记录,而不是更新。本质上这是一个记录更改的日志baz

作为一个额外的好处,如果我可以让 MERGE 语句 (to my_second_table) 只尝试合并,那将是很棒的ab因为大小写的c意思baz没有改变,因此我们不需要接触另一个表。但我知道你不可能拥有一切。

为什么他们不能像 Mongo 那样使用 JavaScript...?

4

1 回答 1

0

没有办法在合并语句中更新两个表,但有几种选择。一个是向第一个表添加触发器。触发器将触发您想要的任何更改,并可以在第二个表中插入行:

CREATE TRIGGER IUA_Table1
AFTER INSERT OR UPDATE
ON Table1 FOR EACH ROW
BEGIN

  INSERT INTO LogTable(groupid, var, sku_no )
  VALUES(:new.groupid, var, sku_no);

END;

此触发器将在任何插入或更新时触发,因此不仅仅是您的合并语句。

请注意,有些人喜欢触发器并将它们用于大多数事情,而另一些人则非常不愿意将它们用于任何事情。就我个人而言,我认为您不应该在触发器中放置太多业务逻辑,但是对于像这样记录更改可能是可以接受的。

于 2015-05-31T17:30:39.290 回答