2016-06-20 16 views
0

Ich bin neu in SQL Server und kämpfen, um einen Fremdschlüssel in einer Tabelle mit einem Primärschlüssel in einer anderen Tabelle zu verknüpfen. Hier ist, was ich habe:kann keinen Fremdschlüssel mit einem Primärschlüssel verbinden

Dies ist meine erste Tabelle

Create table "Employees" 
(EmpID Int identity(1,1) primary key, 
EmpNo Int, 
EmpFName Varchar(30), 
EmpLName Varchar(30), 
JobID int references JobDetails(JobID) 
) 

ich dann eine zweite Tabelle erstellt:

Create table "Projects" 
(ProjectID Int identity(1,1) primary key, 
ProjectName VarChar(30), 
ProjStartDate smalldatetime, 
) 

und versuchte, die dritte Tabelle zu verknüpfen:

Create table "HrsWkd" 
(HrsID Int identity(1,1) primary key, 
ProjectID int references Projects(ProjectID), 
HoursWorked int, 
EmpID int references Employees(EmpID) 
) 

Übrigens, (EmpID) hat eine rote gestrichelte Linie darunter, dass es auf eine ungültige Spalte in "Mitarbeiter" verweist.

Wenn ich versuche, dann werden die Daten in dieser dritten Tabelle eingeben wie folgt aus:

insert into HrsWkd values 
    (1,1,50), 
    (1,2,75), 
    (2,3,85) 

ich diese Meldung:

Msg 547, Ebene 16, Status 0, Zeile 12

Die INSERT-Anweisung steht im Konflikt mit der FOREIGN KEY-Einschränkung "FK__HrsWkd__EmpID__68487DD7". Der Konflikt trat in der Datenbank "New_AP", Tabelle "dbo.Employees", Spalte "EmpID" auf.

Die Anweisung wurde beendet.

Ich habe meine Haare mit diesem für die letzten 2 Stunden gezogen. Ich schätze, es ist etwas Einfaches, aber ich kann es einfach nicht sehen.

Danke!

twotoast

Antwort

0

Ich arbeite nicht speziell mit SQL Server für eine lange Zeit, aber Sie versuchen, einen Datensatz mit einem NULL Mitarbeiter einzufügen.

Während der Erstellung der HrsWkd-Tabelle sollten Sie NULL-Werte zulassen. Ich bin mir nicht 100% sicher über die Syntax. So etwas während der Erstellung der Tabelle.

CREATE TABLE "HrsWkd" (
    HrsID INT IDENTITY(1,1) PRIMARY KEY, 
    ProjectID INT FOREIGN KEY REFERENCES Projects(ProjectID), 
    HoursWorked INT, 
    EmpID INT NULL FOREIGN KEY REFERENCES Employees(EmpID) 
) 

Andernfalls verletzen Sie die Standard-FK-Einschränkung.

+0

Vielen Dank für den Vorschlag. Ich habe es versucht und das Problem bleibt bestehen. Ich denke, dass ich das Problem falsch identifiziert habe. Es scheint, dass das eigentliche Problem mit der "HrsWkd" -Tabelle und der letzten Zeile, wo ich mit den Employees (EmpID) verlinke, ist. Die HrsWkd-Tabelle scheint die Verknüpfung zu EmpID nicht zu mögen und sagt, dass es sich um eine ungültige Spalte handelt. . . . . . – twotoast

+0

Ich habe die blöde Antwort bemerkt, nachdem ich Ihre Tabellenkonfiguration repliziert habe. Aber ich muss es ein wenig anpassen, um mit MariaDB auf meinem lokalen Rechner zu laufen. Es hat funktioniert, aber wie ich schon sagte, ich benutze eine andere Datenbank-Engine. Etwas mit SQL Server verwandt und ich habe keine Maschine hier, um es zu testen – andre

0

Also habe ich herausgefunden, was das Problem war. Es ist mir fast peinlich, es zu erwähnen, weil es so offensichtlich war - aber es könnte in Zukunft jemand anderen helfen.

Die Verbindung zwischen der primären und ausländischen war in Ordnung - die Probleme wurden Daten eingeben.

  1. Ich hatte nicht alle Daten in 'Projekte' hinzugefügt, auf die ich dann in 'HrsWkd' zu verweisen versuchte, und zweitens;
  2. Ich habe die Daten nicht in "HrsWkd" in der Reihenfolge eingegeben, in der die Spalten eingerichtet wurden - also habe ich versucht, ungültige Daten hinzuzufügen. Ich hatte so viel mit den Tischen herumgespielt und verschiedene Befehle/Ergebnisse ausprobiert, dass meine Daten nicht mehr zusammenpassen, als ich hinzufügte.

Oh gut, das ist etwas, was ich (hoffentlich) nie wieder tun werde - also eine "großartige Lernmöglichkeit" !!!!

Verwandte Themen