创建一个触发器,用于在更新同一表中的不同列时更新表中的列-SQL
如何创建触发器,以便在更新同一表中的不同列时更新表中的列 到目前为止,我已经完成了以下工作,这些工作在创建任何新数据时都有效。它可以将数据从“请购单”复制到“采购订单号”,但是,当数据在“请购单”中修改后,“采购订单号”不会发生任何更改,并且该值变为空。我们将非常感谢您的任何帮助创建一个触发器,用于在更新同一表中的不同列时更新表中的列-SQL,sql,sql-server,tsql,triggers,Sql,Sql Server,Tsql,Triggers,如何创建触发器,以便在更新同一表中的不同列时更新表中的列 到目前为止,我已经完成了以下工作,这些工作在创建任何新数据时都有效。它可以将数据从“请购单”复制到“采购订单号”,但是,当数据在“请购单”中修改后,“采购订单号”不会发生任何更改,并且该值变为空。我们将非常感谢您的任何帮助 ALTER TRIGGER [dbo].[PO_Number_Trigger] ON [dbo].[TheCat2] AFTER INSERT AS BEGIN UPDATE dbo.TheCat2 SET
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
这可能会满足您的要求: 您的触发器正在更改CAT2中的所有行。大概,您只想更改新的:
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;
您需要在触发器中添加“UPDATE”和insert,否则它将只在新数据上执行,而不会在更新的数据上执行。还将“top 1”添加到插入表中的select语句中,以便在批量更新时“安全”,但它只更新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
您的触发器不是批处理安全的…非常感谢您,非常熟悉SQL脚本,并感谢您的帮助。总是乐于学习新东西。非常感谢。感谢所有的帮助。我很高兴在这里总能学到新东西。。