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

时间:2014-08-28 14:13:21

标签: sql sql-server tsql triggers

如何更新同一表中不同的列时,如何创建更新表中列的触发器。

到目前为止,我已经完成了以下工作,这在创建任何新数据时都有效。它能够从"采购申请"中复制数据。到" 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

2 个答案:

答案 0 :(得分:1)

您需要添加'UPDATE'以及插入触发器,否则它只会对新数据执行,而不会更新数据。还为插入表中的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

答案 1 :(得分: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;