SQL Server mise à jour de la clé primaire qui est aussi une clé étrangère dans les deux tables
J'ai besoin de mettre à jour la clé primaire d'un enregistrement, mais c'est aussi la clé étrangère dans deux autres tables. Et j'ai besoin de la clé primaire mise à jour pour être reflétée dans les tables enfants ainsi.
Voici ma requête et de l'erreur:
begin tran
update question set questionparent = 10000, questionid= 10005 where questionid = 11000;
Erreur 9/4/2009 10:04:49 0:00:00.000 Base de données SQL Server Erreur: La mise à JOUR de la déclaration en contradiction avec la RÉFÉRENCE de la contrainte "FK_GoalRequirement_Question". Le conflit est survenu dans la base de données "numgmttest", table "dbo.GoalRequirement", la colonne "QuestionID'. 14 0
Je ne me souviens pas comment faire c'est pour ça que je suis ici. Toute aide?
- Une autre option: éviter d'avoir une variable clé primaire. Utiliser une IDENTITÉ en tant que clé primaire à la place. Garder une contrainte unique sur les colonnes qui doivent être uniques. Qui peuvent être hors de votre contrôle, mais il fonctionne très bien pour nous. Nos utilisateurs peuvent modifier l'ID comme ils veulent, et il n'a pas d'incidence sur le niveau réel de la clé primaire.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez:
tout faire au sein d'une transaction et assurez-vous que si la transaction échoue, vous restaurer correctement et toujours respecter les contraintes FK dos.
Mais... pourquoi avez-vous besoin de changer un PK? J'espère que c'est une action qui est exécutée rarement (héritage importation de données ou quelque chose comme ça).
Sont vos relations à l'aide de
Si ils sont ensuite de changer la clé dans la table principale sera de mettre à jour les clés étrangères.
par exemple
BEGIN TRANSACTION; DELETE FROM ParentTable WHERE ID = ?; ROLLBACK;
si votre voir FK violation, puis la mise à jour de FK est restreint.Si vous souhaitez définir la Cascade de la règle graphiquement puis Définissez Cascade de Règle sur SQL Management Studio
Fermer et Enregistrer, c'est Fait!
(Essayé sur SQL 2008)
Que je ne suis pas trop confiant désactivation des contraintes FK, je préfère trop :
Avantage : Pas de contrainte violée au cours du processus.
aller à la Clé étrangère Relations de chaque enfant tables et sur d'Insertion et de mise à Jour de la spécification de modifier supprimer et mettre à jour les règles de cascade. cela peut aider à u peu