2009-09-02 6 views
2

J'ai longtemps attendu les déclencheurs BEFORE. Mais nous avons quelques systèmes qui sont écrits dans ORACLE. Quand un nouveau client potentiel a demandé pourquoi, notre président leur a dit que c'était parce qu'il n'y avait pas de déclencheurs BEFORE dans Sql Server (entre autres choses). Pour cela, le client a répondu: "Oui, en 2008, vous pouvez écrire avant les déclencheurs."Sql Server 2008 - AVANT les déclencheurs?

Maintenant, je n'en ai pas entendu parler, pas lors des événements de lancement, pas dans les listes «Quoi de neuf» en ligne. Autant que je sache, il n'y a toujours pas de déclencheurs AVANT. Est-ce que je me trompe?

Les déclencheurs BEFORE sont-ils réellement cachés en 2008 quelque part?

Répondre

6

Votre client a tort :-) Même dans SQL Server 2008, il n'y a pas de déclencheurs "BEFORE INSERT". Comme Charles Bretana l'a déjà mentionné: vous obtenez des déclencheurs AFTER INSERT ou INSTEAD OF INSERT, mais pas de déclencheurs BEFORE complets dans SQL Server.

C'est un fait pour l'instant - je dois vivre avec et j'espère pour SQL Server 2008 R2! :-)

Marc

+0

C'est ce que je pensais. J'ai attendu et regardé longtemps pour ceux-ci, donc j'ai été assez surpris d'entendre cela. Je pensais qu'ils se trompaient probablement, mais je me suis dit que je vérifierais de toute façon. Merci! :) – eidylon

2

SQL Server (puisque SQL 2k5 je crois) a ce qu'on appelle des déclencheurs "à la place de" qui est, en quelque sorte, un déclencheur Avant.

+0

Yah, INSTEAD OFs * * sorte de vous laisser faire la même chose, mais vous liquidation avoir à complètement recodage quelle que soit les instructions SQL étaient censées prendre effet. Cela conduit à LOADS plus de code dans la base de données, et un potentiel BEAUCOUP plus élevé pour les bogues à se glisser. Par exemple, si une table a un nouveau champ ajouté, ou supprimé, vous devez maintenant mettre à jour au lieu des triggers pour gérer le nouveau (ou manquant). La puissance réelle d'un déclencheur BEFORE est de récurer vos données AVANT qu'il n'entre dans la base de données, ce qui améliore l'intégrité des données sans imposer de fardeau excessif au code frontal. – eidylon

Questions connexes