如何更新同一表中不同的列时,如何创建更新表中列的触发器。
到目前为止,我已经完成了以下工作,这在创建任何新数据时都有效。它能够从"采购申请"中复制数据。到" 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
答案 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;