根据名称从外键表中添加值

时间:2014-02-21 14:52:40

标签: sql key

我想要以下两个表:

CREATE TABLE buildings
(
    ID int IDENTITY NOT NULL PRIMARY KEY,
    city_ID int NOT NULL REFERENCES(cities),
    name char(20) NOT NULL
)

CREATE TABLE cities
(
    ID int IDENTITY NOT NULL PRIMARY KEY,
    name char(30) NOT NULL
)

INSERT INTO cities (name) VALUES ('Katowice')

现在我在写作时需要:

INSERT INTO buildings (city_ID,name) values (1,'bahnhof')

与我写作时的效果相同:

INSERT INTO buildings VALUES ('Katowice','bahnhof')

我的目的是,当我想要向城市添加建筑物时,我会考虑城市名称,而不是城市表中的ID。但有时我记得ID,然后我更喜欢使用ID。是否可以不创建程序?

我正在考虑适当的程序:

CREATE PROCEDURE addbuilding
    @city_ID int,
    @name char
AS
BEGIN
    INSERT INTO buildings (city_ID,name) VALUES (@city_ID,@name)

END

但正如我们上面所见,@ city_ID只能是int。像C ++中的union这样的东西可能是一个很好的解决方案,但它可以在SQL中使用吗?

1 个答案:

答案 0 :(得分:1)

我不确定SQL程序是否支持与C ++类似的联合,但我的建议是一个相当简单的:两个程序。

CREATE PROCEDURE add_building_by_city_id
    @city_ID int,
    @name char
etc

CREATE PROCEDURE add_building_by_city_name
    @city_name char,
    @name char
etc

然后你可以使用你需要的任何一个。当然,第二个程序首先需要一个简单的SELECT,以便按名称查找城市并检索其ID。