小编典典

合并主键-级联更新

sql

有没有一种方法可以将两个主键合并为一个,然后级联更新所有受影响的关系?这是场景:

客户(idCustomer int PK,公司varchar(50)等)

CustomerContacts(idCustomerContact int PK,idCustomer int FK,名称varchar(50)等)

CustomerNotes(idCustomerNote int PK,idCustomer int FK,注释文本等)

有时,客户需要合并为一个。例如,您有一个ID为1的客户,另一个ID为2的客户。您想将两者合并,因此现在2的所有内容都为1。我知道我可以编写一个脚本来更新所有受影响的表一个,但是我想通过使用级联规则使其更适合将来使用,因此我不必在每次添加新关系时都更新脚本。

有任何想法吗?


阅读 175

收藏
2021-04-22

共1个答案

小编典典

没有自动执行此操作的方法,但是您有几个选择,可以手动编写过程,也可以通过代码定期生成合并,也可以在运行时动态生成。为此,您可以使用INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTSandINFORMATION_SCHEMA.KEY_COLUMN_USAGEINFORMATION_SCHEMA.TABLE_CONSTRAINTSandINFORMATION_SCHEMA.COLUMNS and INFORMATION_SCHEMA.TABLES动态地构建该过程。

您还可以简单地将整个操作包装在一个事务中(无论如何是个好主意)。最后一步是从中删除要合并的客户,因此,如果您从未添加过的表上存在RI并尝试进行合并,则它将失败,因为您无法从中删除被合并的客户,因为存在依赖关系。在尚未添加到合并过程的表中记录。

2021-04-22