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
Freigeben: 2025-01-04 19:32:40
Original
931 Leute haben es durchsucht

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)
);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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)
);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage