Heim >Datenbank >MySQL-Tutorial >Warum schlägt meine SQL Server-Fremdschlüsseleinschränkung mit dem Fehler „Anzahl der referenzierenden Spalten' fehl?

Warum schlägt meine SQL Server-Fremdschlüsseleinschränkung mit dem Fehler „Anzahl der referenzierenden Spalten' fehl?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-04 19:32:40932Durchsuche

Why Does My SQL Server Foreign Key Constraint Fail with a

Probleme bei der Erstellung von Fremdschlüsseln in SQL Server lösen

In SQL Server unterscheiden sich Fremdschlüsseldeklarationen von denen in PostgreSQL. Sehen wir uns ein Szenario an, in dem eine Abfrage zu folgendem Fehler führte: „Anzahl der referenzierenden Spalten im Fremdschlüssel unterscheidet sich von der Anzahl der referenzierten Spalten in der Tabelle ‚question_bank‘.“

Fehlerursache:

Der bereitgestellte SQL-Code hat versucht, die folgenden Tabellen zu erstellen:

CREATE TABLE question_bank (
    question_id UNIQUEIDENTIFIER PRIMARY KEY,
    question_exam_id UNIQUEIDENTIFIER NOT NULL,
    question_text VARCHAR(1024) NOT NULL,
    question_point_value DECIMAL,
    CONSTRAINT question_exam_id FOREIGN KEY REFERENCES exams(exam_id)
);

Der Fehler ist aufgrund der Fremdschlüsseleinschränkung aufgetreten „question_exam_id“ in der Tabelle „question_bank“ verweist auf die Spalte „exam_id“ in der Tabelle „exams“. In der Tabelle „question_bank“ ist jedoch nur eine Referenzierungsspalte („question_exam_id“) vorhanden, während die Tabelle „exams“ mehrere Spalten enthält.

Lösung:

Um dieses Problem zu beheben, müssen wir sicherstellen, dass die Anzahl der referenzierenden Spalten mit der Anzahl der referenzierten Spalten übereinstimmt. In diesem Fall müssen wir nur die Spalte „exam_name“ aus der Tabelle „exams“ zur Tabelle „question_bank“ hinzufügen:

ALTER TABLE question_bank ADD COLUMN exam_name VARCHAR(50);

Jetzt kann die Fremdschlüsseleinschränkung erfolgreich erstellt werden:

ALTER TABLE question_bank
ADD CONSTRAINT question_exam_id FOREIGN KEY (question_exam_id, exam_name) REFERENCES exams(exam_id, exam_name);

Alternative Syntax:

Alternativ können Sie die Einschränkung während erstellen der Tabellenerstellungsprozess:

CREATE TABLE question_bank (
    question_id UNIQUEIDENTIFIER PRIMARY KEY,
    question_exam_id UNIQUEIDENTIFIER NOT NULL,
    exam_name VARCHAR(50),
    question_text VARCHAR(1024) NOT NULL,
    question_point_value DECIMAL,
    CONSTRAINT question_exam_id FOREIGN KEY (question_exam_id, exam_name) REFERENCES exams(exam_id, exam_name)
);

In diesem Fall wird die Spalte „exam_name“ zur Tabelle „question_bank“ hinzugefügt und die Fremdschlüsseleinschränkung wird gleichzeitig während der Tabellenerstellung erstellt.

Das obige ist der detaillierte Inhalt vonWarum schlägt meine SQL Server-Fremdschlüsseleinschränkung mit dem Fehler „Anzahl der referenzierenden Spalten' fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn