2011-03-30 3 views
3

Je voudrais savoir s'il est possible de mettre à jour une colonne (ou en général 'faire quelque chose') dans une table SQL quand un événement se produit dans un autre.Comment mettre à jour la table SQL quand une ligne est supprimée dans une autre?

Plus précisément, je voudrais savoir s'il est possible de changer une valeur dans une colonne particulière d'une table enfant lorsqu'une ligne est supprimée dans la table parente. Triez ON DELETE CASCADE mais sans supprimer les lignes juste en les mettant à jour.

Le SGBD que j'utilise est MS SQL Server (édition Express).

Merci beaucoup

Répondre

6

Utilisez un déclencheur sur la table que vous essayez de baser l'événement hors de, ou vous pouvez limiter l'accès (lire la suppression) de cette table se passer que par une procédure stockée . Le code pour changer tout ce que vous voulez changer de l'autre serait maintenu dans le déclencheur ou la procédure stockée.

Je préfère généralement la procédure de procédure stockée, mais ce n'est que ma préférence personnelle.

Stored Procedures

Database Triggers

+0

SQL Server a une clause OUTPUT qui peut simplifier le travail de procédure stockée en écrivant des données à partir des lignes supprimées à une autre table au moment de l'exécution de l'instruction delete. D'autres SGBDR peuvent avoir des caractéristiques similaires. –

+0

Merci! Juste une note: J'utilise .NET Entity Framework pour insérer, supprimer, etc ... L'EF va-t-il gérer seul le déclenchement ou dois-je considérer autre chose? Merci! – Julen

+1

Vous allez définir le déclencheur au niveau de la base de données. Fondamentalement, vous le configurez de sorte que chaque fois qu'une suppression se produit sur la table X, il va exécuter le déclencheur et faire quelque chose à la table Y. Dans votre application, vous supprimerez la ligne comme vous l'avez toujours fait. Notez que ce déclencheur s'exécutera chaque fois qu'un enregistrement est supprimé de la table par un utilisateur. Si vous voulez avoir plus de flexibilité dans quand et comment il est exécuté, alors vous voudrez regarder à créer une procédure stockée qui est appelée par votre application. –

0

Vous pouvez écrire un déclencheur pour le faire.

La syntaxe exacte dépend du RDBMS que vous utilisez.

0

Oui, ça s'appelle un trigger. Nous pouvons donner des informations plus spécifiques si vous spécifiez quel SGBDR vous utilisez.

1

Je voudrais savoir s'il est possible de modifier une valeur dans une colonne particulière dans une table enfant lorsqu'une ligne est supprimée dans la table parente. Sort of ON DELETE CASCADE mais sans supprimer les lignes juste les mettre à jour.

Oui, par ex. les actions référentielles ON DELETE SET DEFAULT et ON DELETE SET NULL.

Questions connexes