Sobre Triggers Insert

20/06/2007 - 21:55 por CHAR72 | Informe spam
Hola estoy intentando programar un triger insert que me actualice un campo
del nuevo registro,

CREATE TRIGGER Insert_Date ON [dbo].[Cajas]
FOR INSERT
AS
DECLARE @ID smallint
SELECT @ID=ID FROM #Datos

UPDATE Cajas
SET Insert_Date=GetDate(), Insert_ID=@ID
FROM Inserted INNER JOIN
Cajas ON Inserted.Num_Caja = Cajas.Num_Caja
WHERE Cajas.Num_Caja=Inserted.Num_Caja

Si lo pongo asi, funciona pero me dispara el trigger UPDATE de la tabla y no
es lo que quiero. No puedo usar valores por defecto porque el ID lo obtengo
de una tabla temporal.

Saludos y gracias

Carlos

Preguntas similare

Leer las respuestas

#1 Maxi
20/06/2007 - 22:05 | Informe spam
Hola, como es que el ID lo tomas de una temporal? porque? que quieres
resolver con este trigger exactamente?, a que te referis con valores por
defecto?


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"CHAR72" <char72[nos pa m]@gmail.com> escribió en el mensaje
news:eYv%
Hola estoy intentando programar un triger insert que me actualice un campo
del nuevo registro,

CREATE TRIGGER Insert_Date ON [dbo].[Cajas]
FOR INSERT
AS
DECLARE @ID smallint
SELECT @ID=ID FROM #Datos

UPDATE Cajas
SET Insert_Date=GetDate(), Insert_ID=@ID
FROM Inserted INNER JOIN
Cajas ON Inserted.Num_Caja = Cajas.Num_Caja
WHERE Cajas.Num_Caja=Inserted.Num_Caja

Si lo pongo asi, funciona pero me dispara el trigger UPDATE de la tabla y
no es lo que quiero. No puedo usar valores por defecto porque el ID lo
obtengo de una tabla temporal.

Saludos y gracias

Carlos


Respuesta Responder a este mensaje
#2 CHAR72
20/06/2007 - 22:21 | Informe spam
Hola Maxi, si te fijas en el trigger el @ID lo tomo de una tabla temporal,
pero para el caso no importa, si quieres supon que el @ID3.

Quiero que para cada insert a la tabla CAJAS se ejecute un trigger que
ponga en el capo ID el numero 123, si lo hago con el trigger que hice se me
dispara otro trigger que es para UPDATE de esta tabla.

Se entiende?

Saludos y gracias

"Maxi" escribió en el mensaje
news:Of7$
Hola, como es que el ID lo tomas de una temporal? porque? que quieres
resolver con este trigger exactamente?, a que te referis con valores por
defecto?


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"CHAR72" <char72[nos pa m]@gmail.com> escribió en el mensaje
news:eYv%
Hola estoy intentando programar un triger insert que me actualice un
campo del nuevo registro,

CREATE TRIGGER Insert_Date ON [dbo].[Cajas]
FOR INSERT
AS
DECLARE @ID smallint
SELECT @ID=ID FROM #Datos

UPDATE Cajas
SET Insert_Date=GetDate(), Insert_ID=@ID
FROM Inserted INNER JOIN
Cajas ON Inserted.Num_Caja = Cajas.Num_Caja
WHERE Cajas.Num_Caja=Inserted.Num_Caja

Si lo pongo asi, funciona pero me dispara el trigger UPDATE de la tabla y
no es lo que quiero. No puedo usar valores por defecto porque el ID lo
obtengo de una tabla temporal.

Saludos y gracias

Carlos






Respuesta Responder a este mensaje
#3 Maxi
23/06/2007 - 01:36 | Informe spam
Hola, ok, el tema es el tipo de trigger que has seleccionado, hay 2 tipos de
triggers

En lugar de
Despues de

Vos has seleccionado el segundo, busca en tus libros online el tipo de
trigger instead of, me parece mas adecuado para lo que queres hacer. De
todas maneras el otro trigger se te va a disparar, para que eso no suceda
deberas poner una condicion en el la cual evalue, te copio un ejemplo donde
uso @@nestlevel

use northwind
go


create table t1 (id int)
go


create trigger tr1 on t1 for update as

if @@nestlevel = 1
begin
if exists (select id from inserted
where id > 10)
begin
print 'error'
rollback tran
end
end
go

insert into t1 values (1)
go

create table t2 (id2 int)
go

create trigger tr2 on t2 for insert as
update t1 set id = 200
go


update t1 set id = 20


insert t1 values (12) -- no da el error porque el tr de t2 no dispara



-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"CHAR72" <char72[nos pa m]@gmail.com> escribió en el mensaje
news:
Hola Maxi, si te fijas en el trigger el @ID lo tomo de una tabla temporal,
pero para el caso no importa, si quieres supon que el @ID3.

Quiero que para cada insert a la tabla CAJAS se ejecute un trigger que
ponga en el capo ID el numero 123, si lo hago con el trigger que hice se
me dispara otro trigger que es para UPDATE de esta tabla.

Se entiende?

Saludos y gracias

"Maxi" escribió en el mensaje
news:Of7$
Hola, como es que el ID lo tomas de una temporal? porque? que quieres
resolver con este trigger exactamente?, a que te referis con valores por
defecto?


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"CHAR72" <char72[nos pa m]@gmail.com> escribió en el mensaje
news:eYv%
Hola estoy intentando programar un triger insert que me actualice un
campo del nuevo registro,

CREATE TRIGGER Insert_Date ON [dbo].[Cajas]
FOR INSERT
AS
DECLARE @ID smallint
SELECT @ID=ID FROM #Datos

UPDATE Cajas
SET Insert_Date=GetDate(), Insert_ID=@ID
FROM Inserted INNER JOIN
Cajas ON Inserted.Num_Caja = Cajas.Num_Caja
WHERE Cajas.Num_Caja=Inserted.Num_Caja

Si lo pongo asi, funciona pero me dispara el trigger UPDATE de la tabla
y no es lo que quiero. No puedo usar valores por defecto porque el ID lo
obtengo de una tabla temporal.

Saludos y gracias

Carlos










Respuesta Responder a este mensaje
#4 CHAR72
27/06/2007 - 00:22 | Informe spam
Gracias. Buscando ... me encontr con la opcion "inteast of " y asi la hice
para el caso del insert.

No se sera mejor que consulta el @@nestedlevel, pero la otra funciona
perfecto.

Saludos


"Maxi" escribió en el mensaje
news:
Hola, ok, el tema es el tipo de trigger que has seleccionado, hay 2 tipos
de triggers

En lugar de
Despues de

Vos has seleccionado el segundo, busca en tus libros online el tipo de
trigger instead of, me parece mas adecuado para lo que queres hacer. De
todas maneras el otro trigger se te va a disparar, para que eso no suceda
deberas poner una condicion en el la cual evalue, te copio un ejemplo
donde uso @@nestlevel

use northwind
go


create table t1 (id int)
go


create trigger tr1 on t1 for update as

if @@nestlevel = 1
begin
if exists (select id from inserted
where id > 10)
begin
print 'error'
rollback tran
end
end
go

insert into t1 values (1)
go

create table t2 (id2 int)
go

create trigger tr2 on t2 for insert as
update t1 set id = 200
go


update t1 set id = 20


insert t1 values (12) -- no da el error porque el tr de t2 no dispara



-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"CHAR72" <char72[nos pa m]@gmail.com> escribió en el mensaje
news:
Hola Maxi, si te fijas en el trigger el @ID lo tomo de una tabla
temporal, pero para el caso no importa, si quieres supon que el @ID3.

Quiero que para cada insert a la tabla CAJAS se ejecute un trigger que
ponga en el capo ID el numero 123, si lo hago con el trigger que hice se
me dispara otro trigger que es para UPDATE de esta tabla.

Se entiende?

Saludos y gracias

"Maxi" escribió en el mensaje
news:Of7$
Hola, como es que el ID lo tomas de una temporal? porque? que quieres
resolver con este trigger exactamente?, a que te referis con valores por
defecto?


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"CHAR72" <char72[nos pa m]@gmail.com> escribió en el mensaje
news:eYv%
Hola estoy intentando programar un triger insert que me actualice un
campo del nuevo registro,

CREATE TRIGGER Insert_Date ON [dbo].[Cajas]
FOR INSERT
AS
DECLARE @ID smallint
SELECT @ID=ID FROM #Datos

UPDATE Cajas
SET Insert_Date=GetDate(), Insert_ID=@ID
FROM Inserted INNER JOIN
Cajas ON Inserted.Num_Caja = Cajas.Num_Caja
WHERE Cajas.Num_Caja=Inserted.Num_Caja

Si lo pongo asi, funciona pero me dispara el trigger UPDATE de la tabla
y no es lo que quiero. No puedo usar valores por defecto porque el ID
lo obtengo de una tabla temporal.

Saludos y gracias

Carlos














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