更新另一行时编写触发器以更新列

时间:2015-03-12 20:16:13

标签: sql triggers

我有一张桌子," person"代表父母和孩子(实际上有更多的列和名称实际上没有这样命名,但其余的信息和准确性并不相关)。

  1. column1 = ID
  2. column2 = parentID
  3. column3 =有效
  4. column2是对另一行中column1的ID的引用。

    1. 如果某行包含column2中的值,则它是一个子项。
    2. 如果某行在column2中包含NULL,则它是父级。
    3. Column3是CHAR(1),用于确定此人是否处于活动状态。如果父母不是孩子,则孩子不能活动。

      1. 第3列可以包含' y'或者' n'
      2. 我需要编写一个触发器来更新子行第3列,当它的'父母已更新为' n'第3栏。

        例如,

        1. 如果row1的值为' Y'对于第3列,其子女可以拥有' y'或者' N'。
        2. 如果row1的值为' N'对于column3,必须更新其子项以使列3 =' N'。
        3. 任何人都可以协助这背后的逻辑吗?我正在使用Microsoft SQL Server Management Studio 2008。

1 个答案:

答案 0 :(得分:1)

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

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

这是一个简单的例子:

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

我希望这有帮助!