【问题标题】:sql server trigger to increment a column when another column decrements当另一列递减时,sql server 触发器增加一列
【发布时间】:2013-04-12 19:59:52
【问题描述】:

我有一个包含 id、title、inventory 列的电影表,并且我添加了一个列 rent_count。我在网上找到了在更新行后增加rental_count的解决方案,但是只有在库存减少时(当有人租用东西时)才能增加租赁计数?

【问题讨论】:

  • “库存”列如何更新?您不能在同一段代码中更新两列吗?例如:从库存中减去 1,在租金中增加 1?

标签: sql-server database triggers


【解决方案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 访问所有正在插入或更新的行(使用新的更新值)。

因此,如果已删除表中存在与插入表中的行匹配的任何行,其中库存的新插入值比旧值小一,那么对于每个这样的行,您要更新(增量)rental_count 字段。

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

【讨论】:

  • 我没有否决它...仍在使用您的答案。 sql server 触发器比我想象的要难。感谢您的帮助。
  • 我没有时间测试这个触发器,它似乎正在工作。但是@user2275848,你为什么需要一个触发器呢?为什么没有存储过程来更新表(当有人租东西时)?
  • 没有dv,但我相信你应该解释一下代码。仅代码的答案不是很清楚(正如 OP 已经提到的)。
  • 你在收到DV后调整了答案。我假设你知道你为什么得到它们。我没有 DV 你,但我当然可以看到为什么原来的答案是 DV'd。
  • 另外,如果您查看original version of your answer which, no offense, was terrible,您可能会理解反对票。
猜你喜欢
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 2013-05-18
  • 2018-01-16
  • 2020-01-15
  • 2012-04-20
  • 2011-07-17
  • 2017-07-09
相关资源
最近更新 更多