1

好吧,我遇到了一些愚蠢的问题。在 SQL Server 2012 中,我尝试像这样实现城市数据库:有一个City对象,一个Street指向City街道所在位置的House对象,以及一个指向Street房屋所在位置的对象。

所以我写的是:

CREATE TABLE City
(
    CityID      INTEGER     NOT NULL,
    CityName    VARCHAR(50) NOT NULL,

    PRIMARY KEY(CityID)
)

INSERT INTO City VALUES 
    (1, 'Moscow'),
     -- Code for 2-7id's instructions is there
    (8, 'Kazan');

CREATE TABLE Street 
(
    StreetID    INTEGER     NOT NULL,
    StreetName  VARCHAR(50) NOT NULL,
    CityID      INTEGER     NOT NULL,

    FOREIGN KEY(CityID) REFERENCES City(CityID),
    PRIMARY KEY(StreetID)
)

INSERT INTO Street VALUES
        (1, 'Nation Street', 1),
         -- code for 2-19 id's insertions is there
        (20, 'Fuj Street', 8);

CREATE TABLE House 
(
    HouseID     INTEGER     NOT NULL,
    StreetID    INTEGER     NOT NULL,
    Height      INTEGER     NOT NULL,

    FOREIGN KEY (StreetID) REFERENCES Street(StreetID),
    PRIMARY KEY(HouseID)
)

INSERT INTO House VALUES 
    (1, 1, 100),
    -- ...

第一次插入有一个错误,INSERT INTO HOUSE VALUES编译器说 and 存在一些限制冲突INSERTFOREIGN KEY但我完全不明白他在抱怨什么。

所有数据实际上都在表中,那么为什么我不能简单地进行插入呢?

这个问题的解决方案是什么?

错误信息:

INSERT 语句与 FOREIGN KEY 约束冲突冲突发生在数据库中,...,表“dbo.Street”,列“StreetID”

4

3 回答 3

1

很可能您正在尝试插入一个街道 ID 不存在于您的街道表中的房屋......

于 2013-05-22T16:13:27.400 回答
0

您的 House 表中存在的 StreetID 不包含在 street 表中......所以请检查两个表中是否存在相同的 streetID

于 2013-09-10T06:24:21.120 回答
0

我建议你使用

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

而不是没有列名的 INSERT。看起来,当插入没有列名时,您在 Street 中的第一个值与 StreetID 对齐,它的 ID 不高于 8。

INSERT INTO Street VALUES
        (1, 'Nation Street', 1),
         -- code for 2-19 id's insertions is there
        (20, 'Fuj Street', 8);

它违反了 FOREIGN KEY 的 RESTRICT INSERT 属性。将列名声明为我的第一个 INSERT 示例,然后您的插入将正常工作。

于 2019-12-21T01:15:55.060 回答