【问题标题】:Creating Triggers创建触发器
【发布时间】:2012-07-30 11:14:35
【问题描述】:

我第一次尝试创建触发器。一旦同一个表中的另一个字段被修改,我想更新表(Opps)中的多个字段。我不确定触发器是最好的方法,但我认为它是。我要更新的字段是 (currStage) 和 (stageDate),第二个字段是修改原始字段 (Stage) 的日期。这有意义吗?

任何帮助将不胜感激,因为我现在迷路了。

【问题讨论】:

  • 哪个 RDBMS? SQL Server、MySQL、Oracle,...?
  • 通常,如果您想了解对表的更改,最好登录到第二个表 - 或者您是说您只会关心表的最新更改(例如忽略 5 分钟前发生的不同更改)
  • 所以基本上它是一个与 SQL db 对话的自定义 Outlook 表单。因此,我创建了表单代码,以便在表单打开时它的行为方式符合我的要求。但是,如果他们使用批量更新工具,它会在不使用代码的情况下强制数据。所以我想使用 SQL 触发器来强制更改。我只关心一张桌子,但所有更新都做了。这能回答你的问题吗?
  • SQL 不是 数据库。 MySQL、Oracle、SQL Server 等都是数据库。由于每个都有自己的程序语言,您将必须指定您使用哪个 RDBMS 来获得相关帮助。一般来说,这样做总是更好,因为每个 RDBMS 都有一些额外的功能等可能会有所帮助。
  • 您的“批量更新工具”也有可能bypass triggers

标签: sql sql-server sql-server-2005 triggers


【解决方案1】:

人们有时有独特的业务需求,听起来您就是其中一种情况。
您可以使用 AFTER INSERT 触发器来使用新值更新字段。 当触发器触发时,您可以执行 UPDATE/SET/WHERE

CREATE TRIGGER update_stages_MyTable
ON MyTable
AFTER INSERT 
BEGIN
   UPDATE MyTable
   SET currStage = 'whatever value I want', stageDate = getdate()
   WHERE Stage = 'the stage Ijust updated'
END;

让我知道这是否有意义并满足您的业务需求。

【讨论】:

    【解决方案2】:

    我认为更好的方法是使用 API,为 UPDATE、INSERT 和 DELETE 创建存储过程。并更新使用您的 UPDATE 过程来更新其他表。过度使用触发器不是一个好习惯。 API和触发方式对比请查看this

    【讨论】:

    • 我无法使用 API,很遗憾,触发器是唯一的方法。
    猜你喜欢
    • 1970-01-01
    • 2017-11-30
    • 2021-08-04
    • 2011-04-26
    • 2011-02-03
    • 2016-09-19
    • 1970-01-01
    相关资源
    最近更新 更多