2014-08-28 68 views
0

如何创建更新同一表中不同列时更新表中的列的触发器。创建一个触发器,用于在同一表中的不同列更新时更新表中的列 - SQL

到目前为止,我已经完成了以下工作,当任何新的数据被创建。它能够将数据从“采购申请单”复制到“PO_Number”,但是当“采购申请单”中的数据已被修改时,不会更改“PO_Number”,并且该值为NULL。任何形式的帮助将被认真感谢。

ALTER TRIGGER [dbo].[PO_Number_Trigger] 
ON [dbo].[TheCat2] 
AFTER INSERT 
AS BEGIN 

    UPDATE dbo.TheCat2 SET PO_Number=(select Purchase_Requisition from inserted) where DocNo= (Select DocNo from inserted); 
    END 
+3

您的触发器不是批处理安全的...... – 2014-08-28 14:19:19

回答

0

这可能会做你想要什么: 你触发改变的TheCat2所有行。想必,你只需要改变新:

ALTER TRIGGER [dbo].[PO_Number_Trigger] 
ON [dbo].[TheCat2] AFTER INSERT 
AS 
BEGIN 
    UPDATE tc 
     SET PO_Number = Purchase_Requisition 
     FROM dbo.TheCat2 tc JOIN 
      inserted i 
      on tc.DocNo = i.DocNo ; 
END; 

不过,或许是一个计算列足以满足您的目的:

alter table add PO_Number as Purchase_Requisition; 
+0

非常感谢。感谢所有的帮助。我很高兴我总是可以在这里学到新东西.. – James 2014-08-28 14:53:27

1

你需要“更新”以及插入添加到触发器,否则它只会对新数据执行,而不会更新数据。还在插入的表格的select语句中添加了“top 1”,以便对批量更新进行“安全”处理,但它只会更新1条记录。

ALTER TRIGGER [dbo].[PO_Number_Trigger] 
ON [dbo].[TheCat2] 
AFTER INSERT, UPDATE 
AS BEGIN 

    UPDATE dbo.TheCat2 SET PO_Number=(select top 1 Purchase_Requisition from inserted) where DocNo= (Select top 1 DocNo from inserted); 
END 
+0

非常感谢你,在SQL脚本中很新鲜,并感谢你的帮助。总是乐于学习新东西。 – James 2014-08-28 14:53:03

相关问题