Alternative aux déclencheurs dans SQL Server
Pour éliminer les problèmes potentiels avec les déclencheurs, quelles sont les alternatives on peut utiliser pour obtenir la même fonctionnalité de réagir à un événement tiré sur une action d'INSERTION?
J'ai une base de données qui doit avoir d'autres valeurs ajoutées lors de l'insertion. L'INSERT est contrôlée par le code compilé et ne peut pas être modifié.
EXEMPLE: Le programme insère une chaîne de caractères et à partir de cette chaîne j'ai besoin de fournir un nombre entier à un nouveau domaine qui pointe vers une look-up table).
Si il y a une alternative à un élément déclencheur, alors s'il vous plaît laissez-moi savoir quelques avantages et inconvénients des alternatives. La principale raison à cela est que les Déclencheurs ne sont pas admis dans nos DB normes.
SQL Server 2008 Enterprise
Ce que potentiels "problèmes" que vous essayez d'éviter par une méthode alternative qui ne ce qui la déclenche?
dépend de la façon dont beaucoup de logique vous avez besoin pour mettre en œuvre, mais vous pouvez consulter les valeurs par défaut et des colonnes calculées à faire des choses simples
Moïse: Que la règle est de vous donner des problèmes de maintenance dans le présent. Votre travail en tant que développeur est de trouver des solutions et à démontrer lorsque les contraintes sont déraisonnables. C'est l'une de ces situations où les règles doivent être modifiées ou au moins contournées afin de fournir une solution. Des règles comme cela ne devrait pas exister en premier lieu, parce qu'ils créent des problèmes comme celui que vous êtes confronté à droite maintenant.
Un simple "éviter les déclencheurs" est généralement une bonne ligne directrice pour la plupart des problèmes de maintenance en bas de la route. Un dur et rapide "ne jamais utiliser des déclencheurs" est une stupide règle qui doit être annulée dès que possible avant que d'autres dommages à long terme.
OriginalL'auteur Todd Moses | 2010-01-15
Vous devez vous connecter pour publier un commentaire.
Comment voulez-vous déterminer votre nombre entier, basé sur la chaîne insérée?
Une alternative, vous voudrez peut-être regarder dans les les colonnes calculées dans SQL Server. Si la correspondance est assez simple (par exemple: extrait de la personnage à 10 sur 14 à partir de la chaîne) ou quelque chose comme ça, vous pouvez créer une colonne calculée pour le faire automatiquement - sans déclencher le besoin.
Vous pouvez même faire ces colonnes calculées persisté (physiquement stockées dans le cadre de vos tables) et de créer des indices sur ces champs!
Colonnes calculées sont disponibles à partir de SQL Server 2000, a persisté colonnes à partir de SQL Server 2005.
OriginalL'auteur marc_s
Alternatives à la plaine-vieux inserts peuvent être réalisés en utilisant des procédures stockées, des déclencheurs, ou plus compliqué insert. Puisque vous n'avez aucun contrôle sur les instructions d'insertion, vous ne serez pas en mesure d'utiliser des procédures stockées, soit. Donc, votre seule option est de les déclencheurs.
Ce que vous décrivez est précisément pourquoi les déclencheurs d'exister. Si vous avez besoin pour accomplir cette tâche, il ne peut pas être fait sous les contraintes que vous avez énumérées.
Déclencheurs sont la meilleure option. Obtenir la DB normes changé (ou au moins permettre à cette tâche à une exception) parce qu'ils sont imparfaits.
Moïse: je serais au moins . Mais je comprends. Même si vous pourriez obtenir le règlement modifié, il ne sera pas effectuée suffisamment tôt pour vous pour résoudre le problème à la main dans un laps de temps raisonnable.
OriginalL'auteur Welbog
Je sais qui a été posée il y a longtemps. Avec SQL Server 2008 "Capture de Données modifiées" MSDN a été introduit. Une autre alternative, mais seulement valable après 2008 R2 est "Suivi des modifications" Configurer le suivi des modifications. Alors que vous pouvez interroger les lignes de filtre (regardez ici) ce qui a changé, ce qui peut ou ne peut pas "résoudre" les problèmes avec des déclencheurs.
OriginalL'auteur Chookoos
Déclencheurs sont la façon à effectuer une action après un événement (insert, update, delete) se produit sur une table SQL; le fait qu'ils existent, il est peu probable qu'il n'y a aucune alternative viable. C'est malheureux à dire, mais la DB normes sont en place efficace de vous empêcher de faire ce que vous voulez sans avoir un processus en cours d'exécution qui, périodiquement, les montres de votre table, puis effectue l'action dont vous avez besoin, ou de modifier tous vos base de données des opérations CrUD à passer par des procédures stockées qui font ce que vous voulez. Puisque vous dites que le dernier n'est pas possible, vous ne pouvez pas changer le
INSERT
états-alors vous êtes de gauche avec juste des déclencheurs.OriginalL'auteur delfuego
SQL Server 2005 a maintenant quelque chose qui s'appelle une clause de SORTIE qui peut faire un traitement supplémentaire après un INSERT (ou autres) se produit. Cette l'article couvre plus de détails. Par exemple, si vous avez besoin de faire le traitement après une commande INSERT, vous pourriez faire quelque chose comme...
Et vous auriez votre unique créé ID pour eux disponibles.
OriginalL'auteur Dillie-O
Pouvez-vous créer une procédure stockée qui se charge de tout pour vous?
Ou vous pourriez le faire au sein de votre application. Essayez de l'insérer, si cela fonctionne, puis faire les autres étapes.
INSERT
déclarations ne peuvent pas être modifiées, parce qu'ils sont dans le code compilé.ahh mon mauvais, raté.
OriginalL'auteur Jack Marchetti
Vos options sont limitées. Je pense que votre seule autre alternative est de faire de votre insère par l'intermédiaire d'un appel de procédure stockée et de mettre le code supplémentaire dans la procédure stockée.
INSERT
déclarations ne peuvent pas être modifiées, parce qu'ils sont dans le code compilé.OriginalL'auteur Randy Minder
Je pense que nous pouvons mettre en œuvre de déclenchement en mode veille prolongée le système d'événements de nos jours en dépit de l'impact sur les performances.Je ne l'ai pas fait avant.mais je pense qu'il fonctionne
OriginalL'auteur Devin_Louis