2017-03-03 8 views
0

Ich habe 2 Tabellen erstellt, table123 und items_ordered.Wie Hinzufügen eines Primärschlüssels und Fremdschlüssel zu einer vorhandenen Tabelle in Microsoft SQL Server-Datenbank

  • table123 enthält 5 Spalten: customerid, firstname, surname, city und state

  • items_ordered enthält 5 Spalten customerid, order_date, item, quantity und price.

Ich möchte einen Primärschlüssel in table123 auf der customerid Spalte und einem Fremdschlüssel in items_ordered auf der customerid Spalte erstellen.

Hier ist der Code habe ich eine primäre & Fremdschlüssel, um zu versuchen und zu erstellen:

ALTER TABLE table123 
    ADD PRIMARY KEY (customerid); 

ALTER TABLE items_ordered 
    ADD FOREIGN KEY (customerid) 
     REFERENCES table123 (customerid); 

Allerdings, wenn ich diese Befehle ausführen, heißt es

nicht PRIMARY KEY-Einschränkung auf NULL festlegbare definieren Spalte in der Tabelle 'table123'

Wie kann ich das beheben? Es gibt auch keine Nullwerte in den Tabellen.

P.S. Ich habe diese alternative Methode versucht, mit einem Primärschlüssel und Fremdschlüssel zu erstellen:

SELECT table123.customerid, table123.surname, 
     items_ordered.order_date, items_ordered.item, items_ordered.price 
FROM table123, items_ordered 
WHERE table123.customerid = items_ordered.customerid; 

Der obige Code gibt mir eine Tabelle, die Verknüpfung customerid an die Kundennamen und kauften Produkt. Aber ist das die richtige Art, einen primären & Fremdschlüssel zu erstellen?

+1

Well , der Fehler sagt alles - Sie können ** keinen Primärschlüssel für eine Nullable-Spalte erstellen - also stellen Sie sicher, dass Sie in Ihrer Definition für 'table123'' 'haben CustomerId INT NOT NULL - ** dann ** können Sie einen Primärschlüssel definieren.Und Ihr zweiter Versuch ist fehlerhaft, weil er die ** richtige ANSI/ISO JOIN-Syntax ** verwenden sollte (anstatt die Tabellen durch Komma getrennt in der 'FROM'-Klausel aufzulisten) - und ** ** ** nicht eine Primärdatei erstellt und/oder Fremdschlüssel - es verbindet nur zwei Tabellen in einer gemeinsamen Spalte –

+0

Okay, wäre es ein Inner Join? Wenn Sie einen Primärschlüssel und einen Fremdschlüssel erstellen, würde es außerdem keine separate Tabelle erstellen? – CrashBandicoot

Antwort

2

Könnten Sie das versuchen?

ALTER TABLE table123 
ALTER COLUMN customerid INT NOT NULL 

Dann laufen:

ALTER TABLE table123 
ADD PRIMARY KEY (customerid) 

Dann

ALTER TABLE items_ordered 
ADD FOREIGN KEY (customerid) 
REFERENCES table123 (customerid) 

Sie benötigen eine Spaltendefinition nicht null, ändern und sicherstellen, dass alle Werte sind einzigartig und

+0

Danke für die Hilfe! – CrashBandicoot

+0

Wenn Sie einen Primär- und einen Fremdschlüssel erstellen, soll damit eine weitere Tabelle erstellt werden? – CrashBandicoot

+0

Definieren primäre und fremde Schlüssel erstellen keine neue Tabelle, sie erstellen Beziehungen zwischen der Tabelle. Ihr Hauptzweck besteht darin, die Datenkonsistenz sicherzustellen; Joins können auch auf anderen nicht - primären/nicht - fremden Schlüsselspalten ausgeführt werden. Wenn Sie einen Fremdschlüssel erstellen, der auf den Primärschlüssel einer anderen Tabelle verweist, zum Beispiel 'student (stud_id, dept_id), der sich auf die Abteilung bezieht (dept_id, dept_name)', ist eine der Sachen, die Sie tun können Fügen Sie einen Eintrag in die Student-Tabelle mit einer nicht vorhandenen Abteilungs-ID ein. – Shruti

0

Dies tritt normalerweise auf, wenn Sie versuchen, einen Primärschlüssel für eine Spalte zu erstellen, die Nullwerte haben darf. Der Inhalt enthält möglicherweise keine Nullwerte, die Definition lässt sie jedoch weiterhin zu.

Ändern Sie die Spaltendefinition so, dass Nullen nicht zulässig sind.

+0

Danke! Ich denke, es war nur ein Problem, die Spalte zu Not Null zu ändern. – CrashBandicoot

Verwandte Themen