【问题标题】:Can I use Stored procedure instead trigger in following case?在以下情况下,我可以使用存储过程来代替触发器吗?
【发布时间】:2016-10-21 10:40:49
【问题描述】:

我的表格有列
studentId,
studentName,
markOne,
markTwo,
total

我创建了一个触发器来计算total,方法是添加markOnemarkTwo.. 每当我更新任何一个标记时,它都会自动更新total 字段。

问:
但是这个过程也可以使用存储过程来实现,那么为什么我们要使用触发器而不是存储过程呢?

【问题讨论】:

  • 发生任何更新时触发器会自动调用。但如果是存储过程,我们应该手动调用。这可能是原因之一。
  • 一般来说,我只会在您别无选择或出于审计目的时使用触发器。戈登提供的答案是您的最佳选择。

标签: sql-server stored-procedures triggers


【解决方案1】:

为什么要使用存储过程或触发器?最好的解决方案是使用计算列:

alter table t add total as (markOne + markTwo);

这将在您引用total 时正确计算值。

注意:您需要从表格中删除表格或重新创建没有实际列的表格。

【讨论】:

    【解决方案2】:

    在您的情况下,您不需要触发器。您只想更新总计字段,所以不要使用触发器。

    触发器在这种情况下使用,当你为markone,marktwo添加数据时,会影响很多表。超过2-3个表,需要在两个字段上更新数据库。这时可以使用触发器。在你的情况你可以简单地使用存储过程。

    谢谢。

    【讨论】:

      【解决方案3】:

      您可以为此创建一个视图,因此您不必更改您的表格。

      create view vwMyTable as
        select studentId, 
               studentName,
               markOne,
               markTwo,
               (markOne + markTwo) as Total
        from   myTable
      

      那么你可以简单地做

      select * from vwMyTable
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-18
        • 1970-01-01
        • 2011-11-28
        • 1970-01-01
        • 2017-02-16
        • 1970-01-01
        相关资源
        最近更新 更多