Pourquoi je ne peux pas mettre à jour ce tableau?
J'ai trois tables dans SQL Server 2008 R2: Country
Address
et Country_Address
Country
a des colonnes:
CountryID
Country
1, Afghanistan
2, de l'Australie
Address
a des colonnes:
AddressID
Address
1, 5 Smith Manière
Country_Address
a des colonnes:
CountryID
AddressID
1, 1
modifier: ainsi, dans l'exemple, 5 smith est une adresse pour l'Afghanistan.
J'ai vidé les tables, puis ajouté deux pays et une adresse, et puis un lien dans Country_Address
entre 1 et 1. Lorsque j'essaie de mettre à jour le CountryID
de 1 à 2, je ne peux pas à cause de FK contrainte. Je ne comprends pas pourquoi c'est, parce que la CountryID
je suis en train d'affecter n'existe pas. Alors, comment puis-je gérer le mettre à jour?
edit1: C'est l'erreur que j'obtiens quand j'essaie de faire la mise à jour de SQL Management Studio, je reçois InvalidOperationException
- "Le modèle de type '...' n'a pas pu être mis à jour." dans Visual Studio.
Aucune ligne n'a été mis à jour.
Les données de la ligne 1 n'a pas été commis.
Source De L'Erreur: .Net SqlClient De Données
Fournisseur de. Message d'erreur: La mise à JOUR
déclaration de conflit avec l'ÉTRANGER
Contrainte de CLÉ
"FK_Country_Address_Address". L'
le conflit est survenu dans la base de données
"...", tableau
"dbo.Adresse", la colonne "AddressID'.L'instruction a été arrêtée.
Cela a été modifié un peu de mon exemple réel, mais la relation est la même, même si elle ne peut pas faire sens parfait dans cet exemple.
CountryID
est PK dans Country
table, et FK Country_Address
table. Pourquoi une contrainte d'arrêter la mise à jour que je suis en train de réaliser?OriginalL'auteur baron | 2010-12-03
Vous devez vous connecter pour publier un commentaire.
Le problème est que lorsque vous essayez de mettre à jour la valeur de la clé primaire dans les Pays de table, le Country_Address tableau serait alors contenir une référence non valide retour à la table countries.
Si vous souhaitez mettre à jour les clés de ce genre, le plus simple est d'activer ce qu'on appelle des mises à jour en cascade. Vous le faire lors de la création de clés étrangères elles-mêmes.
Voir ici: http://msdn.microsoft.com/en-us/library/aa933119%28SQL.80%29.aspx
EDIT: Si je suis enfin de comprendre correctement, je pense que les clés étrangères dans
Country_Address
sont inversés, ou au moins incorrectes sur leCountryID
colonne. Veuillez vérifier les définitions des clés étrangères.Faire
UPDATE Country_Address SET CountryID = 2
devrait travail si tout est correctement configuré. Le message d'erreur que vous obtenez lorsque vous tentez de mettre à jour devrait jamais provoquer une valeur non valide dans unAddressID
colonne -- cela m'indique que la clé étrangère est configuré de manière incorrecte.Mais ce que j'essaie de faire est de ne pas mettre à jour le PK dans les Pays de table, mais plutôt de modifier la relation dans
Country_Address
. Je sais que le (la conception de l') exemple n'est pas parfait. Essentiellement, ce que je fais est-à-dire 5 smith chemin n'est pas uneAddress
pour l'Afghanistan mais unAddress
pour l'Australie......Il devrait être possible de faire la mise à jour... pourriez-vous s'il vous plaît modifier une question d'inclure le exact message d'erreur que vous obtenez?
J'ai mis à jour ma réponse.
OriginalL'auteur Jon Seigel