【问题标题】:Writing a trigger to update a column when a different row is updated在更新不同的行时编写触发器以更新列
【发布时间】:2015-03-12 20:16:12
【问题描述】:

我有一个表,“人”,代表父母和孩子(确实有更多的列和名称实际上不是这样命名的,但其余的信息和准确性并不相关)。

  1. column1 = ID
  2. column2 = parentID
  3. column3 = 活动

column2 是对另一行中 column1 的 ID 的引用。

  1. 如果某行包含 column2 中的值,则该行是子行。
  2. 如果某行在 column2 中包含 NULL,则它是父行。

Column3 是一个 CHAR(1),用于确定此人是否处于活动状态。如果父母不活动,孩子就不能活动。

  1. Column3 可以包含“y”或“n”

我需要编写一个触发器,当子行第 3 列的父行更新为第 3 列的 'n' 时,它会更新它。

例如,

  1. 如果 row1 的 column3 的值为“Y”,则其子级可以有“y”或“N”。
  2. 如果 row1 的 column3 的值为“N”,则必须更新其子项以使 column 3 = 'N'。

任何人都可以协助解释这样做背后的逻辑吗?我正在使用 Microsoft SQL Server Management Studio 2008。

【问题讨论】:

  • 请指定您使用的 DBMS。
  • 对不起!忘了那个。问题已被编辑。谢谢!

标签: sql triggers


【解决方案1】:

使用更新触发器时,“插入”表是更新的结果。在这种情况下,您需要:

  • 查找父母的更新并检查他们是否处于非活动状态
  • 将父级加入其子级
  • 将孩子更新为非活动状态

这是一个简单的例子:

CREATE TRIGGER MyTrigger ON person
AFTER UPDATE
AS
    UPDATE child
    FROM inserted parent
         INNER JOIN person child ON child.ParentID = parent.ID
    SET child.active = 'n'
    WHERE parent.active = 'n'

GO

我希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多