¿Cómo cambio un campo en un trigger INSERT?

24/09/2004 - 14:16 por Horacio | Informe spam
Hola!
Ya estudié lo de linked servers y triggers, como
anteriormente me indicaron, para resolver mi problema.
Pero ahora me encuentro con otro.
Necesito poner la fecha actual en un campo(el último) al
momento que se produce la inserción. ¿Cómo lo consigo?

Aqui esta lo que intenté hacer sin éxito:
CREATE TRIGGER Correos_insert
ON correos
FOR INSERT
AS
BEGIN TRANSACTION inserta
INSERT INTO SSBUETYGSM01.Gasmed.dbo.Correos
(dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC, dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion)
SELECT dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC, dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion
FROM inserted

IF @@ERROR <> 0
GOTO ErrorCode

insert into correos (dsRemitente, dsRemitenteNombre,
dsDestinatario, dsDestinatarioNombre, dsDestinatarioCC,
dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion, dtEnvio)
select dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC, dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion, getdate()
from inserted


COMMIT TRANSACTION inserta

ErrorCode:
IF @@TRANCOUNT <> 0
PRINT 'Error Code'

Preguntas similare

Leer las respuestas

#1 Maxi
24/09/2004 - 14:33 | Informe spam
Hola, el Getdate() va en el Select y no en la lista de campos!! sino tambien
podes poner un Default en el campo


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Horacio" escribió en el mensaje
news:2f0701c4a230$572a33d0$
Hola!
Ya estudié lo de linked servers y triggers, como
anteriormente me indicaron, para resolver mi problema.
Pero ahora me encuentro con otro.
Necesito poner la fecha actual en un campo(el último) al
momento que se produce la inserción. ¿Cómo lo consigo?

Aqui esta lo que intenté hacer sin éxito:
CREATE TRIGGER Correos_insert
ON correos
FOR INSERT
AS
BEGIN TRANSACTION inserta
INSERT INTO SSBUETYGSM01.Gasmed.dbo.Correos
(dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC, dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion)
SELECT dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC, dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion
FROM inserted

IF @@ERROR <> 0
GOTO ErrorCode

insert into correos (dsRemitente, dsRemitenteNombre,
dsDestinatario, dsDestinatarioNombre, dsDestinatarioCC,
dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion, dtEnvio)
select dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC, dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion, getdate()
from inserted


COMMIT TRANSACTION inserta

ErrorCode:
IF @@TRANCOUNT <> 0
PRINT 'Error Code'





Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.764 / Virus Database: 511 - Release Date: 15/09/2004
Respuesta Responder a este mensaje
#2 Horacio
24/09/2004 - 14:58 | Informe spam
Hola Maxi!
Fijate bien, el getdate está en el select!
El problema es que se está haciendo algo en forma
recursiva, no? Cómo lo puedo evitar? o cual es la forma
correcta de modificar un dato en el momento de la
inserción?

Gracias!

HRC


Hola, el Getdate() va en el Select y no en la lista de


campos!! sino tambien
podes poner un Default en el campo


Salu2
-


-
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
-


-
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Horacio" escribió


en el mensaje
news:2f0701c4a230$572a33d0$
Hola!
Ya estudié lo de linked servers y triggers, como
anteriormente me indicaron, para resolver mi problema.
Pero ahora me encuentro con otro.
Necesito poner la fecha actual en un campo(el último) al
momento que se produce la inserción. ¿Cómo lo consigo?

Aqui esta lo que intenté hacer sin éxito:
CREATE TRIGGER Correos_insert
ON correos
FOR INSERT
AS
BEGIN TRANSACTION inserta
INSERT INTO SSBUETYGSM01.Gasmed.dbo.Correos
(dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC, dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion)
SELECT dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC, dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion
FROM inserted

IF @@ERROR <> 0
GOTO ErrorCode

insert into correos (dsRemitente, dsRemitenteNombre,
dsDestinatario, dsDestinatarioNombre, dsDestinatarioCC,
dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion, dtEnvio)
select dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC, dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion, getdate()
from inserted


COMMIT TRANSACTION inserta

ErrorCode:
IF @@TRANCOUNT <> 0
PRINT 'Error Code'





Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.764 / Virus Database: 511 - Release Date:


15/09/2004


.

Respuesta Responder a este mensaje
#3 Maxi
24/09/2004 - 15:24 | Informe spam
tenes razon, debe ser porque es viernes ;-)

mmm eso deberia funcionar bien, si usas el Getdate(). Vos decis que no esta
insertando el campo fecha?


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Horacio" escribió en el mensaje
news:22d001c4a236$2f0b9b40$
Hola Maxi!
Fijate bien, el getdate está en el select!
El problema es que se está haciendo algo en forma
recursiva, no? Cómo lo puedo evitar? o cual es la forma
correcta de modificar un dato en el momento de la
inserción?

Gracias!

HRC


Hola, el Getdate() va en el Select y no en la lista de


campos!! sino tambien
podes poner un Default en el campo


Salu2
-


-
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
-


-
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Horacio" escribió


en el mensaje
news:2f0701c4a230$572a33d0$
Hola!
Ya estudié lo de linked servers y triggers, como
anteriormente me indicaron, para resolver mi problema.
Pero ahora me encuentro con otro.
Necesito poner la fecha actual en un campo(el último) al
momento que se produce la inserción. ¿Cómo lo consigo?

Aqui esta lo que intenté hacer sin éxito:
CREATE TRIGGER Correos_insert
ON correos
FOR INSERT
AS
BEGIN TRANSACTION inserta
INSERT INTO SSBUETYGSM01.Gasmed.dbo.Correos
(dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC, dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion)
SELECT dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC, dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion
FROM inserted

IF @@ERROR <> 0
GOTO ErrorCode

insert into correos (dsRemitente, dsRemitenteNombre,
dsDestinatario, dsDestinatarioNombre, dsDestinatarioCC,
dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion, dtEnvio)
select dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC, dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion, getdate()
from inserted


COMMIT TRANSACTION inserta

ErrorCode:
IF @@TRANCOUNT <> 0
PRINT 'Error Code'





Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.764 / Virus Database: 511 - Release Date:


15/09/2004


.






Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.764 / Virus Database: 511 - Release Date: 15/09/2004
Respuesta Responder a este mensaje
#4 Horacio
24/09/2004 - 16:06 | Informe spam
Cuando hago un insert me tira el error que dice que esta
haciendo algo en forma anidada, que nose pueden hacer mas
transacciones para esa sesion.
Para evitar eso le agregué al final del select
where dtEnvio is null
para que no se repita, pero sigue tirando el mismo error.
Transcribo el mensaje:

Cannot start mor transactions on this session. Unable to
start a nested transaction for OLE DB provider. A nested
transaction was required because the XACT_ABORT option was
set to OFF.



tenes razon, debe ser porque es viernes ;-)

mmm eso deberia funcionar bien, si usas el Getdate(). Vos


decis que no esta
insertando el campo fecha?


Salu2
-


-
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
-


-
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Horacio" escribió


en el mensaje
news:22d001c4a236$2f0b9b40$
Hola Maxi!
Fijate bien, el getdate está en el select!
El problema es que se está haciendo algo en forma
recursiva, no? Cómo lo puedo evitar? o cual es la forma
correcta de modificar un dato en el momento de la
inserción?

Gracias!

HRC


Hola, el Getdate() va en el Select y no en la lista de


campos!! sino tambien
podes poner un Default en el campo


Salu2





-
-
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET





-
-
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Horacio" escribió


en el mensaje
news:2f0701c4a230$572a33d0$
Hola!
Ya estudié lo de linked servers y triggers, como
anteriormente me indicaron, para resolver mi problema.
Pero ahora me encuentro con otro.
Necesito poner la fecha actual en un campo(el último) al
momento que se produce la inserción. ¿Cómo lo consigo?

Aqui esta lo que intenté hacer sin éxito:
CREATE TRIGGER Correos_insert
ON correos
FOR INSERT
AS
BEGIN TRANSACTION inserta
INSERT INTO SSBUETYGSM01.Gasmed.dbo.Correos
(dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC,




dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion)
SELECT dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC,




dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion
FROM inserted

IF @@ERROR <> 0
GOTO ErrorCode

insert into correos (dsRemitente, dsRemitenteNombre,
dsDestinatario, dsDestinatarioNombre, dsDestinatarioCC,
dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion, dtEnvio)
select dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC,




dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion, getdate()
from inserted


COMMIT TRANSACTION inserta

ErrorCode:
IF @@TRANCOUNT <> 0
PRINT 'Error Code'





Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system




(http://www.grisoft.com).
Version: 6.0.764 / Virus Database: 511 - Release Date:


15/09/2004


.






Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.764 / Virus Database: 511 - Release Date:


15/09/2004


.

Respuesta Responder a este mensaje
#5 Liliana Sorrentino
24/09/2004 - 16:43 | Informe spam
Hola Horacio,

No entiendo porqué no hacer el insert en la tabla Correo con el getdate() de
entrada, eso disparará el trigger que hará el insert en
SSBUETYGSM01.Gasmed.dbo.Correos, y nada más.
Lo que está haciendo en forma anidada es invocar al trigger porque dentro de
él estás haciendo otro insert, que invocará al trigger. y así.

Saludos, Liliana.

"Horacio" escribió en el mensaje
news:300001c4a23f$a8122fa0$
Cuando hago un insert me tira el error que dice que esta
haciendo algo en forma anidada, que nose pueden hacer mas
transacciones para esa sesion.
Para evitar eso le agregué al final del select
where dtEnvio is null
para que no se repita, pero sigue tirando el mismo error.
Transcribo el mensaje:

Cannot start mor transactions on this session. Unable to
start a nested transaction for OLE DB provider. A nested
transaction was required because the XACT_ABORT option was
set to OFF.



tenes razon, debe ser porque es viernes ;-)

mmm eso deberia funcionar bien, si usas el Getdate(). Vos


decis que no esta
insertando el campo fecha?


Salu2
-


-
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
-


-
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Horacio" escribió


en el mensaje
news:22d001c4a236$2f0b9b40$
Hola Maxi!
Fijate bien, el getdate está en el select!
El problema es que se está haciendo algo en forma
recursiva, no? Cómo lo puedo evitar? o cual es la forma
correcta de modificar un dato en el momento de la
inserción?

Gracias!

HRC


Hola, el Getdate() va en el Select y no en la lista de


campos!! sino tambien
podes poner un Default en el campo


Salu2





-
-
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET





-
-
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Horacio" escribió


en el mensaje
news:2f0701c4a230$572a33d0$
Hola!
Ya estudié lo de linked servers y triggers, como
anteriormente me indicaron, para resolver mi problema.
Pero ahora me encuentro con otro.
Necesito poner la fecha actual en un campo(el último) al
momento que se produce la inserción. ¿Cómo lo consigo?

Aqui esta lo que intenté hacer sin éxito:
CREATE TRIGGER Correos_insert
ON correos
FOR INSERT
AS
BEGIN TRANSACTION inserta
INSERT INTO SSBUETYGSM01.Gasmed.dbo.Correos
(dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC,




dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion)
SELECT dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC,




dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion
FROM inserted

IF @@ERROR <> 0
GOTO ErrorCode

insert into correos (dsRemitente, dsRemitenteNombre,
dsDestinatario, dsDestinatarioNombre, dsDestinatarioCC,
dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion, dtEnvio)
select dsRemitente, dsRemitenteNombre, dsDestinatario,
dsDestinatarioNombre, dsDestinatarioCC,




dsDestinatarioCCO,
dsResponderA, dsAsunto, dsTipo, dsMensaje,
dsMensajeArchivo, dsAdjuntos, dtCreacion, getdate()
from inserted


COMMIT TRANSACTION inserta

ErrorCode:
IF @@TRANCOUNT <> 0
PRINT 'Error Code'





Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system




(http://www.grisoft.com).
Version: 6.0.764 / Virus Database: 511 - Release Date:


15/09/2004


.






Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.764 / Virus Database: 511 - Release Date:


15/09/2004


.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida