J'ai 2 tableaux: T1 et T2, ce sont des tableaux existants avec des données. Nous avons une relation un à plusieurs entre T1 et T2. Comment puis-je modifier les définitions de table pour effectuer la suppression en cascade dans SQL Server lorsqu'un enregistrement de T1 est supprimé, tous les enregistrements associés dans T2 sont également supprimés.
La contrainte étrangère est en place entre eux. Je ne veux pas supprimer les tables ou créer un déclencheur pour effectuer la suppression de T2. Par exemple, lorsque je supprime un employé, tous les enregistrements de révision doivent également disparaître.
T1 - Employé,
Employee ID
Name
Status
T2 - Examens des performances,
Employee ID - 2009 Review
Employee ID - 2010 Review
sql-server
cascading-deletes
Bichvan Nguyen
la source
la source
Pour ajouter "Suppression en cascade" à une clé étrangère existante dans SQL Server Management Studio:
Tout d'abord, sélectionnez votre clé étrangère et ouvrez-la "DROP and Create To .." dans une nouvelle fenêtre de requête.
Ensuite, ajoutez simplement
ON DELETE CASCADE
à laADD CONSTRAINT
commande:Et appuyez sur le bouton "Exécuter" pour exécuter cette requête.
Soit dit en passant, pour obtenir une liste de vos clés étrangères et voir celles pour lesquelles la «suppression en cascade» est activée, vous pouvez exécuter ce script:
Et si jamais vous trouvez que vous ne pouvez pas
DROP
une table particulière en raison d'une contrainte de clé étrangère, mais que vous ne pouvez pas déterminer quel FK est à l'origine du problème, vous pouvez exécuter cette commande:Le SQL de cet article répertorie tous les FK qui font référence à une table particulière.
J'espère que tout cela vous aidera.
Toutes mes excuses pour le doigt long. J'essayais juste de faire un point.
la source
Vous pouvez le faire avec SQL Server Management Studio.
→ Cliquez avec le bouton droit sur la conception de la table et accédez à Relations et choisissez la clé étrangère dans le volet gauche et dans le volet droit, développez le menu "INSÉRER et METTRE À JOUR la spécification" et sélectionnez "Cascade" comme règle de suppression.
la source
Utilisez quelque chose comme
Remplissez les noms de colonne corrects et vous devriez être défini. Comme mark_s l'a correctement indiqué, si vous avez déjà une contrainte de clé étrangère en place, vous devrez peut-être d'abord supprimer l'ancienne, puis créer la nouvelle.
la source
Tout d'abord pour activer la propriété ONCascade:
1.Drop la contrainte de clé étrangère existante
2. ajoutez un nouveau avec le paramètre ON DELETE CASCADE activé
Ex:
Deuxième propriété à désactiver ONCascade:
1.Drop la contrainte de clé étrangère existante
2.Ajouter un nouveau avec le paramètre ON DELETE NO ACTION activé
Ex:
la source
ON DELETE CASCADE
Il spécifie que les données enfants sont supprimées lorsque les données parent sont supprimées.
Pour cette clé étrangère, nous avons spécifié la
ON DELETE CASCADE
clause qui indique à SQL Server de supprimer les enregistrements correspondants dans la table enfant lorsque les données de la table parent sont supprimées. Ainsi, dans cet exemple, si une valeur product_id est supprimée de la table products, les enregistrements correspondants dans la table d'inventaire qui utilisent ce product_id seront également supprimés.la source
Si la relation un à plusieurs va de T1 à T2, alors elle ne représente pas une fonction et ne peut donc pas être utilisée pour déduire ou déduire une fonction inverse qui garantit que la valeur T2 résultante n'omet pas des tuples de T1 joignant T2 qui sont déductivement valides , car il n'y a pas de fonction inverse valablement déductible. (représenter les fonctions était le but des clés primaires.) La réponse dans SQL pense que oui, vous pouvez le faire. La réponse dans la pensée relationnelle est non, vous ne pouvez pas le faire. Voir les points d'ambiguïté dans Codd 1970. La relation devrait être multiple de T1 à T2.
la source
Je pense que vous ne pouvez pas simplement supprimer la propriété des tables et s'il s'agit de données de production réelles, supprimez simplement le contenu qui n'affecte pas le schéma de la table.
la source