如何写一个基于行更新的触发器
How to write a Trigger based on row update
我是第一次使用触发器,现在遇到了一些问题,
我有 3 个表,InvoiceHead、InvoiceDetails、InventoryMaster。
当我更新 InvoiceHead 的 'Status' 字段(从 0 到 1)时,InvoiceDetails 和 InventoryMaster 的 'Status' 字段需要根据更新的行进行更改。
关系:
InvoiceHead_id=InvoiceDetails_id(FK)和
InventoryMaster_Processid=InvoiceHead_id (FK)
如何在 InvoiceHead 中编写触发器?
请帮忙解决这个问题..
试试这个
create trigger your_trigger
on InvoiceHead
after update
as
//declare @status int;
//select @status=i.status from inserted i;
//IF @status == 1
//BEGIN
update d
set d.status = b.status
from InvoiceDetails as d
join inserted as b
on a.InvoiceDetails_id = b.InvoiceHead_id
where b.status == 1;
update m
set m.status = b.status
from InventoryMaster as m
join inserted as b
on m.InventoryMaster_Processid = b.InvoiceHead_id
where b.status == 1;
end
go
但请记住,在 SQL 中,触发器对整个更新起作用,这与 oracle 中的 rowwise 不同。因此,如果此触发器一次触发不止一行,我的代码将无法满足您的要求。您需要对其进行微调。
我是第一次使用触发器,现在遇到了一些问题,
我有 3 个表,InvoiceHead、InvoiceDetails、InventoryMaster。
当我更新 InvoiceHead 的 'Status' 字段(从 0 到 1)时,InvoiceDetails 和 InventoryMaster 的 'Status' 字段需要根据更新的行进行更改。
关系: InvoiceHead_id=InvoiceDetails_id(FK)和 InventoryMaster_Processid=InvoiceHead_id (FK)
如何在 InvoiceHead 中编写触发器?
请帮忙解决这个问题..
试试这个
create trigger your_trigger
on InvoiceHead
after update
as
//declare @status int;
//select @status=i.status from inserted i;
//IF @status == 1
//BEGIN
update d
set d.status = b.status
from InvoiceDetails as d
join inserted as b
on a.InvoiceDetails_id = b.InvoiceHead_id
where b.status == 1;
update m
set m.status = b.status
from InventoryMaster as m
join inserted as b
on m.InventoryMaster_Processid = b.InvoiceHead_id
where b.status == 1;
end
go
但请记住,在 SQL 中,触发器对整个更新起作用,这与 oracle 中的 rowwise 不同。因此,如果此触发器一次触发不止一行,我的代码将无法满足您的要求。您需要对其进行微调。