如果我的数据类型是varchar(100),为什么我不能插入少于100个字符的数据?

时间:2016-08-01 06:43:57

标签: sql-server foreign-keys foreign-key-relationship

create table HallSchedule
(
     date varchar(10) not null,
     startTime varchar(4) not null,
     hallNo char(5) not null,
     cinemaName varchar(100) not null,

     primary key (date, startTime, hallNo, cinemaName),

     foreign key (cinemaName) references Cinema,
     foreign key (hallNo, cinemaName) references Hall
) 

在这个SQL表中,我声明了cinemaName is varchar(100)的数据类型,但每当我尝试将值插入cinemaName时,就会发生以下错误:

  

INSERT语句与FOREIGN KEY约束冲突" FK__HallSched__cinem__61316BF4"。冲突发生在数据库" MovieAssignment2",table" dbo.Cinema",column' CinemaName'。

1 个答案:

答案 0 :(得分:3)

这不是数据长度的问题,而是FOREIGN KEY constraint的问题。您正在尝试添加cinemaName表中没有的Cinema

正如我在创建脚本中看到的那样,您在列Cinema上有一个包含表cinemaName的外键,因此您需要首先将相关数据添加到Cinema表。

修改

你也有foreign key (hallNo, cinemaName) references Hall所以,基本上你也需要在这里添加相关数据。我打赌你在Hall表上也有相同的参考。

在我看来,这是一个非常糟糕的设计。最好拥有Cinema表,对于每部电影,您将拥有可以在另一个表中使用的id(f.e。id integer identity (1,1) not null)。因此,您不必在所有表格中存储电影全名。