如何在另一个表中添加新记录时更新一个表中的外键

时间:2017-11-14 12:27:42

标签: sql sql-server sql-server-2017

我有两张桌子:

Table A (id int pk, value nvarchar(10), version nvarchar(5))

Table B (id2 int pk, value2 nvarchar(20), TableAID int fk(tableA.id), version nvarchar(5))

示例数据是:

Table A
-------
id | value | version
1    a       1
2    b       1      

Table B
-------
id | value | TableAID | version
1    c       1             1
2    d       1             1

现在,如果我在表A中插入新版本的新记录,我会得到以下内容:

Table A
-------
id | value | version
1    null    1
2    b       1
3    a       2      

表B应如下所示:

Table B
-------
id | value | TableAID | version
1    c       3             1
2    d       3             1

(外键字段必须更改)。

如何实现这一目标?我用游标填充数据和版本。

更新<!/强>

问题是我必须为表A中的每个新版本的数据插入新行。我不允许删除旧版本,我必须让它们保持原样。新版本作为新数据插入,但旧版本的相同数据将其值更改为null。

如果我在表A中插入新版本的数据,我也会获得该值的新ID。因此,我必须使用新ID更新表B.

1 个答案:

答案 0 :(得分:0)

我认为你不能通过使用外键约束来实现这一点。 我宁愿建议你在表A上使用Insert触发器。 insert触发器中的update语句如下所示:

UPDATE B
SET B.TableAID = I.ID
FROM B 
INNER JOIN A
 ON A.ID = B.TableAID
INNER JOIN INSERTED I
 ON I.VALUE = A.VALUE