将外键添加到现有数据库

Lis*_*ray 0 sql database mapping foreign-keys spreadsheet

我正在尝试将数据从Excel电子表格导出到相当复杂的关系数据库中.电子表格通过声明其他对象的名称来指示"外键".(幸运的是,我对电子表格有一些控制权,所以我可以保证这些名称是唯一的,并且它们引用的对象实际存在).

我有一个程序可以在MSSql数据库中重新创建这些表,但它不能自动将它们相互链接.此外,我不想使用对象的实际名称作为主键,因为最终数据库将很大.

因此,如果我有许多现有但未连接的表通过其"名称"字段相互引用,我如何添加通过其ID链接它们的外键?

我所拥有的简化版本:

Parent
ID: 1 (PK)
Name: Mary

Child
ID: 2 (PK)
Name: Jane
ParentName: Mary
Run Code Online (Sandbox Code Playgroud)

而我想要实现的目标:

Child
ID: 2 (PK)
Name: Jane
ParentID: 1 (FK)
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!我无法找到如何在事后添加外键映射或在不同字段上添加外键映射的示例.

Dir*_*irk 5

请参阅ALTER TABLEMSSQL 的语法.你可以想出这样的东西来添加约束到表:

ALTER Child
ADD CONSTRAINT Child_Parent_FK FOREIGN KEY (ParentID) REFERENCES Parent(ID)
Run Code Online (Sandbox Code Playgroud)

然后,一旦约束进入,尝试类似于:

UPDATE Child 
SET ParentID = (SELECT ID FROM Parent WHERE Name = ParentName)
Run Code Online (Sandbox Code Playgroud)

如果你能保证Name父母的独特性,这应该有效.否则,您可以添加LIMIT 1到查询的末尾.但是如果有多个父母具有相同的Name,那么您将需要添加额外的逻辑(原始帖子中未指定).