2016-08-01 20 views
-1
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 
) 

In dieser SQL-Tabelle, stelle ich fest, dass der Datentyp cinemaName is varchar(100), aber wenn ich versuche, Werte in cinemaName einzufügen, tritt dieser Fehler auf:Wenn mein Datentyp Varchar (100) ist, warum kann ich keine Daten einfügen, die weniger als 100 Zeichen enthalten?

Die INSERT-Anweisung in Konflikt mit der FOREIGN KEY-Einschränkung „FK__HallSched__cinem__61316BF4“ . Der Konflikt ist in der Datenbank "MovieAssignment2", Tabelle "dbo.Cinema", Spalte "CinemaName" aufgetreten.

+9

als der Fehler sagt "Fremdschlüssel Einschränkung". überprüfen Sie, dass der Wert, den Sie einfügen, in der Cinema-Tabelle existiert – Squirrel

+2

Es ist, weil es keine Zeile in der Tabelle "Kino" mit diesem Namen gibt –

+2

Haben Sie die Fehlermeldung gelesen? Die Inhaltslänge jeder Spalte ist für den Fehler irrelevant, den Sie erhalten ... –

Antwort

3

Es ist kein Problem mit der Länge der Daten, es ist ein Problem mit Ihrem FOREIGN KEY constraint. Sie versuchen, cinemaName hinzuzufügen, die nicht in Ihrer Tabelle Cinema ist.

Wie kann ich sehen, aus Skript erstellen Sie, sofern Sie einen Fremdschlüssel mit Tisch Cinema auf der Säule cinemaName, so müssen Sie zunächst relevante Daten zu Cinema Tabelle hinzuzufügen.

EDIT

Auch Sie haben foreign key (hallNo, cinemaName) references Hall so, im Grunde müssen Sie auch hier relevanten Daten hinzufügen. Ich wette, Sie haben die gleiche Referenz aufTabelle auch.

Meiner Meinung nach ist es ein sehr schlechtes Design. Bessere Cinema Tabelle, für jeden Film haben Sie eine id (zB), die in anderen Tabellen verwendet werden könnte. Sie müssen den vollständigen Filmnamen nicht in allen Tabellen speichern.