¿Cómo crear un activador que actualice el campo de fecha y el campo de hora al modificar la fila?


10

He creado una tabla testtabledentro de la base de datos testbaseque tiene la siguiente estructura:

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

Sin embargo, ¿cómo escribo un activador para que actualice esa fila en particular que ha sido modificada (o actualizada con nueva información) y registre la fecha de modificación en el expire_datecampo y el tiempo de modificación en el expire_timecampo? (o si esto es posible?)


¿Has visto cómo se crea un disparador?

Sí, he visto cómo se crea el disparador (Ref: msdn.microsoft.com/en-us/library/ms189799(v=sql.105).aspx ) pero una cosa me molesta es que cómo se inserta la ACTUALIZACIÓN declaración para la fila que se desencadena al obtener la condición correcta como enWHERE id = Changed_Row_ID
Jack

Respuestas:


8

Sería bastante fácil, pero en realidad recomendaría cambiar la lógica del comando que está insertando / actualizando los datos para que agregue información adicional en este punto.

Sin embargo, si desea continuar con un disparador, puede hacer algo como esto:

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  

Esto usa la INSERTEDtabla para averiguar product_nolas filas que se han cambiado / creado. Puede encontrar más información sobre los desencadenantes en el siguiente enlace:

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

Espero que esto te ayude.


Nunca pensé que MS SQL realmente formaría una tabla llamada inserted. Entonces, ¿eso significa que sería seguro no tener su propia tabla de base de datos para tener un nombre como insertedy deleted?
Jack

1
Sí, recomendaría no tener sus propias tablas con estos nombres solo para evitar confusiones ;-)
Mr.Brownstone

en la página del manual del activador de creación, puede encontrar un enlace a la página siguiente que describe el uso de las tablas insertadas / eliminadas ( msdn.microsoft.com/en-us/library/ms191300.aspx )
miracle173
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.