我正在创建After Insert触发器,它工作正常,但我在执行触发器内的语句之前有一些条件
- 基于不同的CustomerId运行触发器,我想检查在我的LoyaltyDetailsTable中插入了哪个CustomerId,如果最后一次插入 是Customerid = 2然后传递那个条件然后运行的Customerid 触发器,或者如果Customerid = 1,则运行该Id的触发器, 等等。
- 我想检查在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)
这是我第一次尝试编写触发器,而here是表结构。
任何帮助都会很棒。
答案 0 :(得分:1)
您在这里寻找的是inserted
表。每次发出UPDATE
语句时,SQL Server都会生成两个名为inserted
和deleted
的虚拟表,用于存储有关您正在进行的数据修改的信息。可以从触发器访问这些表。有关详细信息,请参阅此处:https://msdn.microsoft.com/en-us/library/ms191300.aspx
您可以使用inserted
获取您要查找的ID。所以,而不是:
WHERE ClaimCustomerId=1
你可以使用:
WHERE ClaimCustomerId=inserted.ClaimCustomerId