Maison >base de données >tutoriel mysql >Pourquoi ma contrainte de clé étrangère SQL Server échoue-t-elle avec une erreur « Nombre de colonnes de référencement » ?
Résolution des problèmes de création de clé étrangère dans SQL Server
Dans SQL Server, les déclarations de clé étrangère diffèrent de celles de PostgreSQL. Examinons un scénario dans lequel une requête a généré l'erreur : "Le nombre de colonnes référencées dans la clé étrangère diffère du nombre de colonnes référencées, table 'question_bank'."
Cause de l'erreur :
Le code SQL fourni a tenté de créer les tables suivantes :
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) );
L'erreur s'est produite car la clé étrangère la contrainte "question_exam_id" dans la table "question_bank" fait référence à la colonne "exam_id" dans la table "exams". Cependant, une seule colonne de référencement ("question_exam_id") est présente dans la table "question_bank", alors que la table "exams" comporte plusieurs colonnes.
Solution :
Pour résoudre ce problème, nous devons nous assurer que le nombre de colonnes référencées correspond au nombre de colonnes référencées. Dans ce cas, il suffit d'ajouter la colonne "exam_name" de la table "exams" à la table "question_bank" :
ALTER TABLE question_bank ADD COLUMN exam_name VARCHAR(50);
Maintenant, la contrainte de clé étrangère peut être créée avec succès :
ALTER TABLE question_bank ADD CONSTRAINT question_exam_id FOREIGN KEY (question_exam_id, exam_name) REFERENCES exams(exam_id, exam_name);
Syntaxe alternative :
Alternativement, vous pouvez créer le contrainte lors du processus de création de la table :
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) );
Dans ce cas, la colonne "exam_name" est ajoutée à la table "question_bank" et la contrainte de clé étrangère est créée simultanément lors de la création de la table.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!