一尘不染

插入后的SQL触发器使用条件更新另一个表

sql

我正在创建After Insert触发器,它可以正常工作,但是在触发器内部执行语句之前,我有一定条件

1.
基于不同的CustomerId运行触发器,我要检查在我的LoyaltyDetailsTable中插入了哪个CustomerId,说如果最后一次插入是Customerid
= 2,则在该条件下传递该Customerid,然后运行触发器,或者如果Customerid = 1,然后为此运行触发器ID,依此类推。
2.
我想检查在PriceClaimTable中插入的CustomerId是否存在,如果存在,则更新详细信息,否则仅在LoyaltyDetailsTable中插入值。

触发查询

CREATE TRIGGER DetailsAfterInsert ON [dbo].[LoyaltyDetailsTable]
FOR INSERT

as

UPDATE PriceClaimTable 
SET CurrentPoints = 
(  
(SELECT SUM(LoayaltyPointsTable.Points) AS RecentPoints FROM LoayaltyPointsTable
join LoyaltyDetailsTable ON LoayaltyPointsTable.LoyaltyPointsId 
= LoyaltyDetailsTable.LoyaltyPointsId
WHERE CustomerId=1 and LoyaltyDetailsId= (SELECT MAX(LoyaltyDetailsId)  
AS LoyaltyDetailsTable FROM LoyaltyDetailsTable))

+

(SELECT CurrentPoints FROM PriceClaimTable WHERE ClaimCustomerId=1 and 
PriceClaimId=(SELECT max(PriceClaimId) FROM PriceClaimTable
))

) 
WHERE ClaimCustomerId=1 and PriceClaimId=(SELECT max(PriceClaimId) FROM PriceClaimTable)

任何帮助将是巨大的。


阅读 206

收藏
2021-03-17

共1个答案

一尘不染

您在这里寻找的是inserted桌子。每次发出UPDATE语句时,SQL
Server都会生成两个称为的虚拟表inserteddeleted这些虚拟表存储有关您正在进行的数据修改的信息。您可以通过触发器访问这些表。有关更多信息,请参见此处:https : //msdn.microsoft.com/zh-
cn/library/ms191300.aspx

您可以inserted用来获取您要查找的ID。因此,代替:

WHERE ClaimCustomerId=1

您可以使用:

WHERE ClaimCustomerId=inserted.ClaimCustomerId
2021-03-17