Triggers

20/02/2010 - 13:11 por Ricardo Flores | Informe spam
Hola, tengo una tabla con la siguiente estructura:

ID INT (AUTONUMERO)
EVENTO1 CHAR 10
FECHAEVENTO1 DATETIME
EVENTO2 CHAR 10
FECHAEVENTO2 DATETIME

Lo que necesito hacer es que cuando se actualize el campo EVENTO1, se anote
en forma automática la fecha/hora en el campo FECHAEVENTO1 y asi para los
demás campos de EVENTO. Creo que esto se puede hacer con un Trigger, pero no
se como. Agradecería un ejemplo.

Saludos
Mario Flores

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
21/02/2010 - 01:02 | Informe spam
Ricardo,

Puedes usar un trigger, o un procedimiento almacenado para actualizar ambas
columnas.

create trigger tr_T_upd on dbo.T
for update
as
if @@rowcount = 0 return;

update A
set A.c1_dt = case when A.c1 <> D.c1 then getdate() else A.c1_dt end
from dbo.T as A inner join deleted as D on A.pk = D.pk;
GO


AMB

"Ricardo Flores" wrote:

Hola, tengo una tabla con la siguiente estructura:

ID INT (AUTONUMERO)
EVENTO1 CHAR 10
FECHAEVENTO1 DATETIME
EVENTO2 CHAR 10
FECHAEVENTO2 DATETIME

Lo que necesito hacer es que cuando se actualize el campo EVENTO1, se anote
en forma automática la fecha/hora en el campo FECHAEVENTO1 y asi para los
demás campos de EVENTO. Creo que esto se puede hacer con un Trigger, pero no
se como. Agradecería un ejemplo.

Saludos
Mario Flores
Respuesta Responder a este mensaje
#2 Gustavo Cantero
21/02/2010 - 01:49 | Informe spam
Ricardo:
Creo que deberías hacer algo como esto:


CREATE TRIGGER [NombreDelTrigger] ON [Tabla] INSTEAD OF UPDATE
AS
BEGIN
SET NOCOUNT ON;

UPDATE [Tabla]
SET
[Tabla].FECHAEVENTO1 = CASE
WHEN [Tabla].EVENTO1 <> Inserted.EVENTO1 THEN GETDATE()
ELSE [Tabla].FECHAEVENTO1
END,
[Tabla].FECHAEVENTO2 = CASE
WHEN [Tabla].EVENTO2 <> Inserted.EVENTO2 THEN GETDATE()
ELSE [Tabla].FECHAEVENTO2
END,
[Tabla].EVENTO1 = Inserted.EVENTO1,
[Tabla].EVENTO2 = Inserted.EVENTO2
FROM Inserted
WHERE [Tabla].ID = Inserted.ID
END


Por favor contame si te funcionó o, en caso contrario, que error te dio.
Suerte!

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar

De: Ricardo Flores [mailto:]
Expuesto a las: Sábado, 20 de Febrero de 2010 09:11 a.m.
Expuesto en: microsoft.public.es.sqlserver
Conversación: Triggers
Asunto: Triggers

Hola, tengo una tabla con la siguiente estructura:

ID INT (AUTONUMERO)
EVENTO1 CHAR 10
FECHAEVENTO1 DATETIME
EVENTO2 CHAR 10
FECHAEVENTO2 DATETIME

Lo que necesito hacer es que cuando se actualize el campo EVENTO1, se
anote
en forma automática la fecha/hora en el campo FECHAEVENTO1 y asi para los
demás campos de EVENTO. Creo que esto se puede hacer con un Trigger, pero
no
se como. Agradecería un ejemplo.

Saludos
Mario Flores
Respuesta Responder a este mensaje
#3 Alejandro Mesa
21/02/2010 - 17:14 | Informe spam
Gustavo,

Las filas afectadas en la tabla en cuestion son identicas a las de la tabla
virtual "inserted". La comparacion se debera hacer entre la tabla afectada y
la tabla virtual "deleted" o entre ambas tablas virtuales "inserted /
deleted".


AMB


"Gustavo Cantero" wrote:

Ricardo:
Creo que deberías hacer algo como esto:


CREATE TRIGGER [NombreDelTrigger] ON [Tabla] INSTEAD OF UPDATE
AS
BEGIN
SET NOCOUNT ON;

UPDATE [Tabla]
SET
[Tabla].FECHAEVENTO1 = CASE
WHEN [Tabla].EVENTO1 <> Inserted.EVENTO1 THEN GETDATE()
ELSE [Tabla].FECHAEVENTO1
END,
[Tabla].FECHAEVENTO2 = CASE
WHEN [Tabla].EVENTO2 <> Inserted.EVENTO2 THEN GETDATE()
ELSE [Tabla].FECHAEVENTO2
END,
[Tabla].EVENTO1 = Inserted.EVENTO1,
[Tabla].EVENTO2 = Inserted.EVENTO2
FROM Inserted
WHERE [Tabla].ID = Inserted.ID
END


Por favor contame si te funcionó o, en caso contrario, que error te dio.
Suerte!

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar

De: Ricardo Flores [mailto:]
Expuesto a las: Sábado, 20 de Febrero de 2010 09:11 a.m.
Expuesto en: microsoft.public.es.sqlserver
Conversación: Triggers
Asunto: Triggers

Hola, tengo una tabla con la siguiente estructura:

ID INT (AUTONUMERO)
EVENTO1 CHAR 10
FECHAEVENTO1 DATETIME
EVENTO2 CHAR 10
FECHAEVENTO2 DATETIME

Lo que necesito hacer es que cuando se actualize el campo EVENTO1, se
anote
en forma automática la fecha/hora en el campo FECHAEVENTO1 y asi para los
demás campos de EVENTO. Creo que esto se puede hacer con un Trigger, pero
no
se como. Agradecería un ejemplo.

Saludos
Mario Flores

.

Respuesta Responder a este mensaje
#4 Gustavo Cantero
21/02/2010 - 20:53 | Informe spam
¿Estás seguro? Porque fijate que el trigger tiene puesto "INSTEAD OF", o
sea, todavía no se realizó el UPDATE en la tabla.
Saludos.

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar


De: Alejandro Mesa [mailto:]
Expuesto a las: Domingo, 21 de Febrero de 2010 01:14 p.m.
Expuesto en: microsoft.public.es.sqlserver
Conversación: Triggers
Asunto: Re: Triggers

Gustavo,

Las filas afectadas en la tabla en cuestion son identicas a las de la
tabla
virtual "inserted". La comparacion se debera hacer entre la tabla afectada
y
la tabla virtual "deleted" o entre ambas tablas virtuales "inserted /
deleted".


AMB


"Gustavo Cantero" wrote:

Ricardo:
Creo que deberías hacer algo como esto:


CREATE TRIGGER [NombreDelTrigger] ON [Tabla] INSTEAD OF UPDATE
AS
BEGIN
SET NOCOUNT ON;

UPDATE [Tabla]
SET
[Tabla].FECHAEVENTO1 = CASE
WHEN [Tabla].EVENTO1 <> Inserted.EVENTO1 THEN GETDATE()
ELSE [Tabla].FECHAEVENTO1
END,
[Tabla].FECHAEVENTO2 = CASE
WHEN [Tabla].EVENTO2 <> Inserted.EVENTO2 THEN GETDATE()
ELSE [Tabla].FECHAEVENTO2
END,
[Tabla].EVENTO1 = Inserted.EVENTO1,
[Tabla].EVENTO2 = Inserted.EVENTO2
FROM Inserted
WHERE [Tabla].ID = Inserted.ID
END


Por favor contame si te funcionó o, en caso contrario, que error te
dio.
Suerte!

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar

De: Ricardo Flores [mailto:]
Expuesto a las: Sábado, 20 de Febrero de 2010 09:11 a.m.
Expuesto en: microsoft.public.es.sqlserver
Conversación: Triggers
Asunto: Triggers

Hola, tengo una tabla con la siguiente estructura:

ID INT (AUTONUMERO)
EVENTO1 CHAR 10
FECHAEVENTO1 DATETIME
EVENTO2 CHAR 10
FECHAEVENTO2 DATETIME

Lo que necesito hacer es que cuando se actualize el campo EVENTO1, se
anote
en forma automática la fecha/hora en el campo FECHAEVENTO1 y asi para
los
demás campos de EVENTO. Creo que esto se puede hacer con un Trigger,
pero
no
se como. Agradecería un ejemplo.

Saludos
Mario Flores

.

Respuesta Responder a este mensaje
#5 Alejandro Mesa
22/02/2010 - 20:01 | Informe spam
Gustavo Cantero,

Lo que hicistes esta correcto. He sido yo quien no se fijo en que era un
trigger tipo "instead of".

AMB


"Gustavo Cantero" wrote:

¿Estás seguro? Porque fijate que el trigger tiene puesto "INSTEAD OF", o
sea, todavía no se realizó el UPDATE en la tabla.
Saludos.

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar


De: Alejandro Mesa [mailto:]
Expuesto a las: Domingo, 21 de Febrero de 2010 01:14 p.m.
Expuesto en: microsoft.public.es.sqlserver
Conversación: Triggers
Asunto: Re: Triggers

Gustavo,

Las filas afectadas en la tabla en cuestion son identicas a las de la
tabla
virtual "inserted". La comparacion se debera hacer entre la tabla afectada
y
la tabla virtual "deleted" o entre ambas tablas virtuales "inserted /
deleted".


AMB


"Gustavo Cantero" wrote:

> Ricardo:
> Creo que deberías hacer algo como esto:
>
>
> CREATE TRIGGER [NombreDelTrigger] ON [Tabla] INSTEAD OF UPDATE
> AS
> BEGIN
> SET NOCOUNT ON;
>
> UPDATE [Tabla]
> SET
> [Tabla].FECHAEVENTO1 = CASE
> WHEN [Tabla].EVENTO1 <> Inserted.EVENTO1 THEN GETDATE()
> ELSE [Tabla].FECHAEVENTO1
> END,
> [Tabla].FECHAEVENTO2 = CASE
> WHEN [Tabla].EVENTO2 <> Inserted.EVENTO2 THEN GETDATE()
> ELSE [Tabla].FECHAEVENTO2
> END,
> [Tabla].EVENTO1 = Inserted.EVENTO1,
> [Tabla].EVENTO2 = Inserted.EVENTO2
> FROM Inserted
> WHERE [Tabla].ID = Inserted.ID
> END
>
>
> Por favor contame si te funcionó o, en caso contrario, que error te
> dio.
> Suerte!
>
> Gustavo A. Cantero
> Scientia® Soluciones Informáticas
> MCP - MCSD - MCTS - MCPD
> http://www.scientia.com.ar
> http://www.programandoamedianoche.com
> http://foro.scientia.com.ar
>
> De: Ricardo Flores [mailto:]
> Expuesto a las: Sábado, 20 de Febrero de 2010 09:11 a.m.
> Expuesto en: microsoft.public.es.sqlserver
> Conversación: Triggers
> Asunto: Triggers
>
> Hola, tengo una tabla con la siguiente estructura:
>
> ID INT (AUTONUMERO)
> EVENTO1 CHAR 10
> FECHAEVENTO1 DATETIME
> EVENTO2 CHAR 10
> FECHAEVENTO2 DATETIME
>
> Lo que necesito hacer es que cuando se actualize el campo EVENTO1, se
> anote
> en forma automática la fecha/hora en el campo FECHAEVENTO1 y asi para
> los
> demás campos de EVENTO. Creo que esto se puede hacer con un Trigger,
> pero
> no
> se como. Agradecería un ejemplo.
>
> Saludos
> Mario Flores
>
> .
>

.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida