【问题标题】:add a value from one column to another after an update of a trigger更新触发器后将值从一列添加到另一列
【发布时间】:2014-10-22 02:19:20
【问题描述】:

我的桌子上有一个列col1,该列正在减少。当col1 取值0时,我希望col1 取名为col2 的列的值,col2 传递取值0。

PD:我已经有一个触发器,可以在我进行插入时减少列。当我的触发器最终到达让col1=0 时,我需要将col1 更改为col2col2=0 的其他触发器。我尝试了以下触发器,但不起作用

create Trigger tr on table
after insert,update As
declare @id int
set @id=(select inserted.ID_TABLE from inserted)

UPDATE table
    SET col1 = CASE WHEN col1=0 THEN col2                 
    END
UPDATE table
set col2=0
where ID_TABKE=@id

【问题讨论】:

  • 这个要求真的很奇怪。反正你已经在用一个触发器了,为什么不加这个条件呢?
  • 您的代码非常脆弱,并且很可能无法执行您想要的操作,因为您在触发器中使用了标量值。当插入的行数超过 1 行时会发生什么?无论前端如何,并且您的触发器需要处理它,它都可以并且将会在某个时候发生。

标签: sql-server triggers


【解决方案1】:

试试这个代码
用您的表名更新表名“TableTrigger

create Trigger tr on TableTrigger
after insert,update 
As

UPDATE TableTrigger
SET col1 =  CASE WHEN TableTrigger.col1=0 THEN TableTrigger.col2 else TableTrigger.col1 END,
    col2 =  CASE WHEN TableTrigger.col1=0 THEN 0 else TableTrigger.col2 END  
from TableTrigger
       JOIN inserted 
         ON TableTrigger.id = inserted.id

【讨论】:

  • 谢谢!!,我不知道为什么,但是当col1=0 出现时col1=col2-1 而不是col1=col2
  • “PD:我已经有一个触发器,当我插入时会减少列”@@User 你需要检查你提到的那个触发器。第二,如果可能的话,我同意@Lamak 将逻辑合并到一个触发器而不是两个触发器中。
【解决方案2】:

试试这个未经测试的。因为你没有提到 col1 应该只在 col1=0 时更新,所以我删除了案例

UPDATE A
SET    a.col1 = b.col2,
       a.col2 = 0
FROM   table a
       JOIN inserted b
         ON a.id = b.id 

【讨论】:

    猜你喜欢
    • 2021-09-17
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 2018-03-04
    • 2019-10-13
    • 2022-11-11
    • 2012-04-20
    • 2021-07-16
    相关资源
    最近更新 更多