我正在创建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)
任何帮助将是巨大的。
您在这里寻找的是inserted桌子。每次发出UPDATE语句时,SQL Server都会生成两个称为的虚拟表inserted,deleted这些虚拟表存储有关您正在进行的数据修改的信息。您可以通过触发器访问这些表。有关更多信息,请参见此处:https : //msdn.microsoft.com/zh- cn/library/ms191300.aspx
inserted
UPDATE
deleted
您可以inserted用来获取您要查找的ID。因此,代替:
WHERE ClaimCustomerId=1
您可以使用:
WHERE ClaimCustomerId=inserted.ClaimCustomerId