复杂的SQL Server数据库查询

时间:2012-06-05 12:39:31

标签: sql-server

以前我只有一个表(我有更多,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”关键状态和城市表?

3 个答案:

答案 0 :(得分:2)

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

Update rule

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

 Update Rule

指定当用户尝试使用外键关系中涉及的数据更新行时发生的情况:

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

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

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

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

  4. 您可以探索这些可能有助于您解决问题的选项。 请参阅MSDN article documention

答案 1 :(得分:2)

你必须为每所大学做这件事:

INSERT INTO UNIVERSITY (..., FK_CITY, FK_STATE)
VALUES (..., (SELECT ID FROM CITY WHERE Name = @city), (SELECT ID FROM STATE WHERE Name = @state))

答案 2 :(得分:0)

不幸的是,你不能给出上面的表定义,至少不能以自动方式。大学表中需要有一些东西将它与City和State表联系起来。如果我理解正确,您需要在大学表中临时包含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添加到大学表中。