INSERT与FOREIGN KEY限制冲突

时间:2013-05-22 16:09:01

标签: sql foreign-keys sql-server-2012 insertion

好吧,我遇到了一些愚蠢的问题。在SQL Server 2012中,我试图像这样实现城市数据库:有一个City对象,一个Street对象,指向放置街道的City,以及{{1指向放置房屋的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 VALUESINSERT存在一些限制冲突,但我完全不明白他在抱怨什么。

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

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

错误讯息:

  

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

3 个答案:

答案 0 :(得分:1)

很可能你正试图插入街道表中不存在街道ID的房屋......

答案 1 :(得分:0)

House表中的StreetID不包含在街道表中....所以请检查表中是否存在相同的streetId

答案 2 :(得分:0)

我建议您使用

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

代替没有列名的INSERT。 看起来,当不使用列名插入时,Street中的第一个值应与ID不大于8的StreetID对齐。

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示例,那么您的插入将正常工作。