【问题标题】:Multiple triggers on table表上的多个触发器
【发布时间】:2020-01-05 14:48:27
【问题描述】:

我使用 MS SQL Server Management Studio 2017。我有一个触发器 (trigg_1),它插入另一个表 (table_2) 中的 table_1col_1(表 table_2 的 FK)值. Trigg_1 在我插入一些值时起作用,trigg_1col_1 中插入值。现在,我需要另一个触发器trigg_2,它不会让我更改 col_1。如果我禁用trigg_1trigg_2 可以工作。

CREATE TRIGGER [dbo].[trigg_1]
   ON  [dbo].[table_1] 
   AFTER INSERT
AS 
BEGIN

update table_1
set col_1=(select col_2 from table_2 where table_1.IDc1=table_2.IDc2);

END

这可行,但是当我想在 EDIT TOP 200 ROWS 中更改值(现在不为空,因为trigg_1 插入值)col_1,我需要trigg_2

【问题讨论】:

  • 触发器正在为每次插入更新表中的所有行,因为您没有加入虚拟 inserted 表。
  • 您是否需要trigg_2,当您尝试更改table_1.col_1 中的某些值时它会起作用?触发器而不是更新呢?此外,您可以使用 AFTER UPDATE 触发器并用表 deleted 中的旧值替换新值。
  • 我想我会使用最后一个选项。我是这样做的,但我可能需要触发器。感谢您的建议

标签: sql sql-server database triggers


【解决方案1】:

如果您知道在其中插入更新触发的表的依赖关系,那么您可以在插入和更新中使用输出子句并存储到临时表中并相应地使用。 你可以参考这个https://www.sqlservercentral.com/articles/the-output-clause-for-update-statements

【讨论】:

    猜你喜欢
    • 2012-10-21
    • 2013-11-29
    • 2017-10-22
    • 2012-12-18
    • 2017-08-21
    • 1970-01-01
    • 2021-07-29
    • 2011-11-01
    • 2014-12-06
    相关资源
    最近更新 更多