SI une mise à JOUR() dans SQL server déclencheur
Si il y a:
IF UPDATE (col1)
...dans le serveur SQL de déclenchement sur une table, qu'il ne retourne true uniquement si col1 a été modifié ou mis à jour?
J'ai une mise à jour régulière de la requête comme
UPDATE table-name
SET col1 = 'x',
col2 = 'y'
WHERE id = 999
Maintenant que ma préoccupation est de savoir si le "col1" a " x " auparavant, puis, de nouveau, nous avons mis à jour à 'x'
serait IF UPDATE ("col1")
déclencher retourner Vrai ou pas?
Je suis confronté à ce problème que mon enregistrer la requête est générique pour toutes les colonnes, mais quand j'ai ajouter cette condition renvoie True, même si elle n'est pas changé...je suis Donc concerné que faire dans ce cas si je veux ajouter une condition de ce genre?
Vous devez vous connecter pour publier un commentaire.
Elle renvoie true si une colonne a été mis à jour. Une mise à jour signifie que la requête a FIXÉ la valeur de la colonne. Si la valeur précédente était la même que la nouvelle valeur est largement irelevant.
c'est une mise à jour.
lorsque le col déjà eu valeur de 99 aussi c'est une mise à jour.
Au sein de la détente, vous avez accès à deux tables internes qui peuvent aider. Le "insérée" table comprend la nouvelle version de chaque ligne, Le "supprimer" tableau comprend la version originale de chaque ligne. Vous pouvez comparer les valeurs de ces tableaux pour voir si votre champ de valeur a été modifiée.
Ce que vous avez à faire est de vérifier pour différentes valeurs dans les tables inserted et deleted plutôt que d'utiliser des mises à jour() (N'oubliez pas de tenir compte de valeurs null). Ou vous pourriez arrêter de faire les mises à jour inutiles.
Voici un moyen rapide pour numériser les lignes pour voir si une colonne changé avant de décider d'exécuter le contenu d'un déclencheur. Cela peut être utile par exemple lorsque vous voulez écrire une histoire de l'enregistrement, mais vous ne voulez pas le faire si rien n'a vraiment changé.
Nous utilisons tout le temps en ETL processus d'importation, où l'on peut ré-importer les données, mais si rien n'a vraiment changé dans le fichier source, nous ne voulons pas créer un nouvel enregistrement de l'historique.
Noter que ce déclencheur suppose que votre table source (celle qui déclenche le trigger) et la table d'historique ont les mêmes mises en page en colonnes.
Au raccourci le "Pas de mise à jour" cas, vous devez également vérifier au début si votre requête touché toutes les lignes à tous:
Cela a fonctionné pour moi
.....