【问题标题】:SQL How to update 'Deleted' rowSQL如何更新“已删除”行
【发布时间】:2015-12-28 00:08:57
【问题描述】:

当输入 UPDATE 语句时,触发器会被激活,这样最后原始行和更新行都会保留下来,如果用户愿意,可以显示出来。

原始行(已编辑标记为 Y)的值是正确的,但更新后的行(已编辑标记为 NULL)应该具有与原始行的 ModificationDate 相同的 CreationDate,而不是 CreationDate。我该如何解决?

CREATE TRIGGER CloneAfterUpdate
ON ProcessList
AFTER UPDATE
AS 
IF (UPDATE(Amount) OR UPDATE(Name))
BEGIN
   INSERT INTO ProcessListHist (
           ID,
           Name,
           Amount,
           CreationDate,
           Edited,
           ModificationDate)
   SELECT 
      ID, Name, Amount, CreationDate, 'Y', GETDATE() 
   FROM deleted
END

执行此 T-SQL 时调用的触发器:

UPDATE ProcessList 
SET Amount = 23000 
WHERE Name = 'Tammy'

SELECT * 
FROM ProcessList 

UNION ALL 

SELECT * 
FROM ProcessListHist 
ORDER BY ID ASC, CreationDate ASC

【问题讨论】:

    标签: sql sql-server datetime triggers delete-row


    【解决方案1】:

    我刚开始使用 sql,但我认为这可能会做到:

    UPDATE ProcessList 
    SET Amount = 23000 
    WHERE Name = 'Tammy'
    
    SELECT     ph.ID,
               ph.Name,
               ph.Amount,
               ph.CreationDate,
               ph.Edited,
               pl.ModificationDate,
    
    FROM ProcessList pl
    left join ProcessListHist ph
    on pl.id=ph.id and pl.Name= ph.name and pl.CreationDate =ph.CreationDate
    ORDER BY ID ASC, CreationDate ASC
    

    这是未经测试的,只是为了给你一个想法。如果这不正确,我深表歉意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      相关资源
      最近更新 更多