Sql Server在多个表上具有多个约束的更新级联

时间:2014-07-30 12:45:00

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

我看过类似于我的问题,但没有一个完全相同。

假设我有以下(简化)表:

表A

aID int PRIMARY KEY
10
11

表B

bID int PRIMARY KEY, aID int FOREIGN KEY referencing A.aID
100, 10
101, 11

表C

cID int PRIMARY KEY, bID int FOREIGN KEY referencing B.bID
1001, 101

表D

aID int, bID int, cID int
11, 101, 1001

我希望约束表D,以便:

  1. aIDbIDcID都是有效的ID值
  2. aIDbID是表B中的有效对
  3. bIDcID是表C中的有效对
  4. 使用外键约束很容易处理数字1.

    但是假设我将表C更新为

    1001, 100
    

    如何确保表D自动更新为

    10, 100, 1001
    

    请注意,此处必须更改2个字段才能满足上面的2.和3.有没有办法用外键执行此操作,或者是唯一的AFTER UPDATE触发器?

2 个答案:

答案 0 :(得分:0)

根据我在这种情况下的观点,不要创建其他表D,选择基于表(AB)-C的内连接的所有数据,在你的情况下,通过sql select语句创建表D但是定义一个额外的触发B,C上的更新,因此它们可以截断表D,因此D再次重建

答案 1 :(得分:0)

我最终将表D更改为VIEW,即表B和C的JOIN

CREATE VIEW D AS
SELECT BB.aID, BB.bID, CC.cID FROM B BB
JOIN C CC
ON CC.bID = BB.bID

一旦我意识到这样做就给了我想要的东西,它变得更加容易管理。