触发根据另一个字段的选择来更新一个字段-两个表

时间:2018-10-01 13:37:07

标签: sql sql-server-2012

由于我不经常使用它们,所以我在Triggers上还很新。 这是我的代码:-对不起,由于某些原因,我无法在评论中发布它:

after insert, update
AS
BEGIN
DECLARE @STAGE VARCHAR (50)

  set @STAGE = (SELECT b.Stage from INSERTED i inner join Opp_View B on i.Opp_Id = b.Opp_Id where i.Opp_Id = b.Opp_Id)

  if @STAGE IN ('not started','Initial comm','Needs assessment','Proposal submission','closing phase','Commitment to buy','sale won')
  BEGIN
  INSERT INTO O_Stage
  (Client_id,Contact_Number,O_Stage)
  SELECT i.Opp_id, 0, b.Stage FROM INSERTED i
  inner join opp_view B on i.Opp_Id = b.Opp_Id
   where i.Opp_Type = '0' and i.Opp_Id = b.Opp_Id
   End

   End
GO

我的结果如下:

结果如下:

当我插入机会时,两个字段都具有相同的值。哪个好 然而.. 我发现如果我尝试为相同的条目插入另一个机会-例如,它不会更改表2中的谷值: 如果我从O_stage中执行select *-它仅显示第一个插入的记录: 客户编号| O_Stage 181004250828540240011O |初始通讯

我需要它检查记录是否存在以及是否存在更新舞台,但是如果它不存在(新条目),则必须插入。通过执行“如果存在”然后更新否则插入,逻辑看起来很简单,但是我不这样做知道如何写语法。

机会和O_stage表中都已经定义了阶段。这是实现目标的错误方法吗?我应该将O_stage表保留为空白,以便在执行触发器时插入值吗?

我该如何执行以下操作:

检查值是否已经存在,如果存在,则删除旧值并插入新值

0 个答案:

没有答案