当另一列减少时,sql server触发器增加一列

时间:2013-04-12 19:59:52

标签: sql-server database triggers

我有一个包含列ID,标题,库存的电影表,我添加了一列rental_count。在线更新后,我发现在线增加rental_count的解决方案,但是只有当库存减少时(当有人租房时)才可以增加租赁数量吗?

1 个答案:

答案 0 :(得分:1)

   Create trigger trigUpdateRentalCount 
   On Movies for Update 
   As
         if Exists( Select * from inserted I
                       Join deleted d
                            On d.pk = i.pk
                    Where i.inventory = d.inventory - 1)

            Update m Set rental_count += 1
            From Movies m 
               join (inserted i Join deleted d 
                        on i.pk = d.Pk
                           and i.inventory = d.inventory - 1)
                  on i.PK = m.PK  

编辑解释触发器。在任何触发器中,用户都可以通过导致触发器触发的sql语句访问要删除或更新的行集(使用旧值)。可以使用关键字deleted访问此集。

使用关键字inserted,它还可以访问所有插入或更新的行(使用新的更新值)。

因此,如果删除的表中存在与插入表中的行匹配的任何行,其中库存的新插入值比旧值小1,则对于每个此类行,您要更新(递增)rental_count字段。

触发器依赖于If Exists语句来确定插入和删除中是否存在任何此类行。然后,如果有,它会增加Movies表中匹配行中的rental_count值。