我有两张桌子:
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.
答案 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