0

以前我只有一张桌子(我有更多,ofc,但这些是我正在努力解决的问题),这就是UNIVERSITY桌子。

我现在想再创建两个表:STATECITY

表属性

UNIVERSITY: ID, NAME, SHORTNAME, FK_STATE, FK_CITY

STATE: ID, NAME, SHORTNAME

CITY : ID, NAME

问题

我正在解析大学(包括这所大学所在的城市和州)的 Excel 表。一旦我把所有这些信息都记在心里,最难的部分就来了。

我如何:

在数据库中插入所有大学,包括其州和城市,但查询 STATE 和 CITY 数据库的 ID,以正确设置大学的 FK。

示例:
一旦我添加一所名为“PUC-RIO”的大学,它就会显示在“RIO DE JANEIRO”、(城市)“RIO DE JANEIRO”(州)中。添加大学本身不是问题,但是,如何将其外键更新为州和城市表上的“RIO DE JANEIRO”键?

4

3 回答 3

2

在声明外键关系时,您会看到一个对话框,您可以在其中指定关系的表

更新规则

默认情况下,更新规则设置为无操作。根据 msdn 文章,您可以在为表指定外键时更改几个选项

 Update Rule

指定如果用户尝试使用外键关系中涉及的数据更新行时会发生什么:

1.无操作错误消息告诉用户不允许更新并且回滚更新。

  1. 级联更新包含外键关系中涉及的数据的所有行。如果表将包含在使用逻辑记录的合并发布中,请不要指定 CASCADE。有关逻辑记录的更多信息,

  2. Set Null如果表的所有外键列都可以接受空值,则将该值设置为空。仅适用于 SQL Server 2005。

  3. 设置默认 值 如果表的所有外键列都定义了默认值,则将该值设置为为列定义的默认值。仅适用于 SQL Server 2005。

您可以探索这些可能帮助您解决问题的选项。请参考MSDN 文章文档

于 2012-06-05T13:11:11.733 回答
2

您必须为每所大学执行此操作:

INSERT INTO UNIVERSITY (..., FK_CITY, FK_STATE)
VALUES (..., (SELECT ID FROM CITY WHERE Name = @city), (SELECT ID FROM STATE WHERE Name = @state))
于 2012-06-05T13:13:45.847 回答
0

不幸的是,您不能给出上面的表定义,至少不能以自动方式给出。University 表中需要有一些东西将其与 City 和 State 表联系起来。如果我理解正确,您需要在 University 表中临时包含 CityName 和 StateName 列,然后您可以在名称字段之间进行连接:

UPDATE U
    SET FK_CITY = C.ID
FROM UNIVERSITY AS U
    JOIN CITY AS C
        ON U.CITYNAME = C.NAME

否则,您需要查找 FK 并在添加新大学时手动添加它们。此外,在 City 表中包含 FK_State 可能更容易,这样您只需将城市的 ID 添加到您的大学表中。

于 2012-06-05T13:14:13.390 回答