【问题标题】:Ms Sql Insert Trigger To Affect Other TableMs Sql 插入触发器以影响其他表
【发布时间】:2017-12-19 13:05:01
【问题描述】:

我试图在插入table a 时设置table b 值,但对table b 没有任何影响。好像没有trigger。你有什么建议吗。我在下面尝试过,但没有结果。

alter trigger triggername on tablea after insert as
begin
update tablea set valuetablea_a = valuetablea_b where id = (select distince id from inserted)
end

begin 
update tableb set valuetableb_a = (select valuetablea_a from tablea where id = (select distincd id from Inserted))
where date = (select distinct date from Inserted)
end

【问题讨论】:

  • 你的问题抽象得太远了,现在显然这甚至不是可运行的代码。请尝试至少一点详细描述您要达到的目标。可能会为表 A 和 B 添加一些示例数据,然后描述将新行插入表 A 时会发生什么。

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


【解决方案1】:

试试这个:

ALTER TRIGGER triggername ON tablea AFTER INSERT AS
BEGIN

UPDATE a 
SET 
    valuetablea_a = I.valuetablea_b
    FROM tablea A
        INNER JOIN inserted I
            ON A.Id = I.Id

UPDATE B
    SET
        valuetableb_a = A.valuetablea_a 
        FROM tableb  B
            INNER JOIN tablea 
            ON 1=1 AND EXISTS
            (
                SELECT 1 FROM inserted WHERE ID = A.ID AND [Date] = B.DATE
            ) 
end

在第一次更新中,你给了这个

update tablea set valuetablea_a = valuetablea_b

这意味着从 TableA 将值从列 valuetablea_b 更新为 valuetablea_a 对于更新的每一行。而不是从更新的 valuetablea_b 列中获取值

第二次更新通过匹配更新记录中的 Id 和 Date 字段来更新 TableB.valuetableb_a 中的值

【讨论】:

  • 您可以向 OP 解释这将使您的答案更好;)
  • 1 = 1 的内连接?
猜你喜欢
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 2019-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多