Déclencher lors de l'insertion et de mise à jour qui ajoute de la date de modification
Je suis en train de faire un simple tableau avec les noms, e-mails, etc, mais j'ai aussi un ModifiedDate
. Mon idée est d'utiliser un déclencheur après tant d'insertion et de mise à jour, et insérer la date actuelle. Donc si quelqu'un fait n'importe quoi (sauf les supprimer) pour que la colonne, la date devrait en tenir compte.
Ce n'est cependant pas de travail.
CREATE TRIGGER ModDate
ON X
AFTER INSERT, UPDATE
AS
BEGIN
INSERT INTO X (ModifiedDate)
VALUES (GETDATE())
END
Maintenant, j'ai un couple de valeurs qui ne peuvent pas être nulles, et ce que cela semble faire est d'essayer et de créer une nouvelle ligne. Je le voudrais pour insérer la date dans la ligne qui est actuellement en cours de suite, je n'ai aucune idée de comment si. Aussi de ce que si j'ajoute 5 lignes à la fois ?
- Bien sûr, c'est la création d'une nouvelle ligne, vous disposez d'une instruction INSERT. Si vous voulez intercepter l'insertion et/ou de mise à jour pour modifier une de ces valeurs, vous devez utiliser un déclencheur INSTEAD of. Ensuite pour gérer les multiples opérations de ligne vous avez besoin pour créer votre code de déclencheur afin qu'il les références insérées table virtuelle. Je vous conseille d'utiliser deux déclencheur plutôt qu'un seul. Ou même mieux serait de mettre cette logique dans votre procédure.
- Comment aurais-je mis cette logique dans mon "procédure" ?
- J'ai été en supposant que vous utilisez des procédures pour la mise à jour et de l'insertion, mais qui pourrait ne pas être le cas. 🙂
Vous devez vous connecter pour publier un commentaire.
Vous devez rejoindre la
inserted
table virtuelle sur le déclencheur pour limiter les lignes qui sont mis à celles réellement changé. Essayez ceci:Comme @ZoharPeled correctement souligné dans un commentaire ci-dessous il n'y a vraiment pas beaucoup de point en ayant le déclencheur de mise à jour de la date à insérer - il serait préférable d'utiliser
getdate()
que la valeur par défaut pour la colonne (ou même comme un autre de la colonneInsertedDate
si vous souhaitez suivre lorsque les enregistrements ont été initialement créés) et ont la gâchette seulement de modifier lesModifiedDate
colonne après les mises à jour.Voir le la documentation pour plus d'informations sur le inséré et supprimé tables.
GETDATE()
la valeur par défaut ?UPDATE
seulement, et ajouter une valeur par défautGETDATE()
pourModifiedDate
, il devrait fonctionner de la même façon ? Et il le fait, mais en mieux. Merci encore!Si vous n'avez pas les clés sur l'insertion de données et vous n'êtes pas dans la commande sql pour ajouter une valeur par défaut sur la colonne modifieddate, vous pouvez obtenir le déclencheur d'insertion où la modifieddate colonne est null:
nom de la table: x
nom du déclencheur: ModDate
mise à jour le champ après l'insertion ou la mise à jour du tableau: ModifiedDate