Comment créer un déclencheur qui met à jour le champ de date et le champ d'heure lors de la modification de la ligne?


10

J'ai créé une table testtableà l'intérieur de la base de données testbasequi a la structure suivante:

product_no (int, not null)
product_name (varchar(30), not null)
price (money, null)
expire_date (date, null)
expire_time (time(7), null)

Cependant, comment puis-je écrire un déclencheur de telle sorte qu'il mettra à jour cette ligne particulière qui a été modifiée (ou mise à jour avec de nouvelles informations) et enregistre la date de modification dans le expire_datechamp et l'heure de modification dans le expire_timechamp? (ou si c'est possible?)


Avez-vous regardé comment un déclencheur est créé?

oui, j'ai regardé comment le déclencheur est créé (Ref: msdn.microsoft.com/en-us/library/ms189799(v=sql.105).aspx ) mais une chose me dérange, c'est comment insérer la MISE À JOUR déclaration pour la ligne qui est déclenchée en obtenant la condition correcte comme dansWHERE id = Changed_Row_ID
Jack

Réponses:


8

Ce serait assez facile, mais je recommanderais en fait de changer la logique de la commande qui insère / met à jour les données afin d'ajouter des informations supplémentaires à ce stade.

Cependant, si vous souhaitez procéder à un déclencheur, vous pouvez faire quelque chose comme ceci:

create trigger my_trigger
on my_table
after insert, update
as
begin
declare @dt datetime = getdate();
update a
set expire_date = CONVERT(DATE, @dt, 101),
    expire_time = CONVERT(TIME, @dt)
from my_table as a
join inserted as b 
on a.product_no = b.product_no; 
end
go  

Celui-ci utilise le INSERTEDtableau pour rechercher product_noles lignes qui ont été modifiées / créées. Vous pouvez en savoir plus sur les déclencheurs sur le lien ci-dessous:

http://msdn.microsoft.com/en-us/library/ms189799.aspx

J'espère que ceci vous aide.


Je n'ai jamais pensé que MS SQL formerait réellement une table appelée inserted. Donc, cela signifie-t-il qu'il serait sûr de ne pas avoir votre propre table de base de données pour avoir un nom tel que insertedet deleted?
Jack

1
Oui, je recommanderais de ne pas avoir vos propres tables avec ces noms juste pour éviter toute confusion ;-)
Mr.Brownstone

sur la page de manuel create trigger, vous trouverez un lien vers la page suivante décrivant l'utilisation des tables insérées / supprimées ( msdn.microsoft.com/en-us/library/ms191300.aspx )
miracle173
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.