Trigger instead of insert...

02/04/2004 - 02:23 por luis_mtz | Informe spam
Saludos

Tengo el siguiente trigger...

CREATE TRIGGER trg_insert_movimiento ON movimiento INSTEAD
OF INSERT as
BEGIN
insert into movimiento (mov_fol,con_cla,con_des)
SELECT COALESCE((SELECT MAX(mov_fol) FROM
movimiento) +1, 1),con_cla,con_des FROM inserted
END

Bien esta es la estructura, se encuentran muchos mas
campos, solo que los omito para no hacerlo tan extenso, el
problema es que me envia error que mov_fol no puede ser
NULL. El insert se realiza desde un procedimiento
almacenado..

ALTER PROC dbo.pduinsertmovimiento
@concla int,
@condes varchar(50),
@lnid int OUTPUT AS
INSERT INTO dbo.movimiento
(con_cla, con_des)
VALUES (@concla, @condes)
SET @lnid=SCOPE_IDENTITY()


bien segun yo el trigger por ser instead la insercion real
se realiza en este, y aqui es donde se asigna valor al
campo mov_fol, alguien ve que estoy haciendo mal?

muchas gracias.

luis_mtz

Preguntas similare

Leer las respuestas

#1 Maximiliano Damian Accotto
02/04/2004 - 03:28 | Informe spam
hola, lo que yo haria es poner un isnull en el Max y ponerle 0 o sea si ese
MAx da nulo entonces pone un 0 o lo que fuere

insert into movimiento (mov_fol,con_cla,con_des)
SELECT (SELECT isnull(MAX(mov_fol),0) + 1 FROM
movimiento) ,con_cla,con_des FROM inserted

proba asi a ver que pacha y me decis :D

Bye



Salu2

Maximiliano Damian Accotto
Gerente de IT
Fundicion San Cayetano S.A.
Buenos Aires Argentina
-
maxi_accotto[arroba]speedy[.]com[.].ar
MSN:



"luis_mtz" escribió en el mensaje
news:176d601c41848$ab6918c0$

Saludos

Tengo el siguiente trigger...

CREATE TRIGGER trg_insert_movimiento ON movimiento INSTEAD
OF INSERT as
BEGIN
insert into movimiento (mov_fol,con_cla,con_des)
SELECT COALESCE((SELECT MAX(mov_fol) FROM
movimiento) +1, 1),con_cla,con_des FROM inserted
END

Bien esta es la estructura, se encuentran muchos mas
campos, solo que los omito para no hacerlo tan extenso, el
problema es que me envia error que mov_fol no puede ser
NULL. El insert se realiza desde un procedimiento
almacenado..

ALTER PROC dbo.pduinsertmovimiento
@concla int,
@condes varchar(50),
@lnid int OUTPUT AS
INSERT INTO dbo.movimiento
(con_cla, con_des)
VALUES (@concla, @condes)
SET @lnid=SCOPE_IDENTITY()


bien segun yo el trigger por ser instead la insercion real
se realiza en este, y aqui es donde se asigna valor al
campo mov_fol, alguien ve que estoy haciendo mal?

muchas gracias.

luis_mtz

Respuesta Responder a este mensaje
#2 luis_mtz
02/04/2004 - 16:58 | Informe spam
hola Max!

pues mira se me complico pk ya hice lo siguiente..
modifique como indicaste y lo mismo, cree una
tabla 'temporales' y lo puse asi en el TRIGGER..

CREATE TRIGGER trg_insert_movimiento ON dbo.movimiento
INSTEAD OF INSERT as
BEGIN
insert into temporales values (getdate(),"Desde
trigger")
insert into dbo.movimiento (mov_fol,con_cla,con_des)
SELECT (SELECT isnull(MAX(mov_fol),0) + 1
FROM dbo.movimiento),con_cla,con_des FROM inserted
END


y bien me envia el error que mov_fol no puede estar nulo,
y yo esperaba que al menos se insertara en 'temporales'
pero nada, temporales esta vacia despues de realizar.. no
tengo transacciones como para que me revierta el
insert.. ahora mi teoria es que por alguna razon no se
aplica el trigger instead, pero no veo mi error..

gracias.

luis_mtz


hola, lo que yo haria es poner un isnull en el Max y


ponerle 0 o sea si ese
MAx da nulo entonces pone un 0 o lo que fuere

insert into movimiento (mov_fol,con_cla,con_des)
SELECT (SELECT isnull(MAX(mov_fol),0) + 1 FROM
movimiento) ,con_cla,con_des FROM inserted

proba asi a ver que pacha y me decis :D

Bye



Salu2

-


-
Maximiliano Damian Accotto
Gerente de IT
Fundicion San Cayetano S.A.
Buenos Aires Argentina
-
maxi_accotto[arroba]speedy[.]com[.].ar
MSN:



"luis_mtz" escribió


en el mensaje
news:176d601c41848$ab6918c0$

Saludos

Tengo el siguiente trigger...

CREATE TRIGGER trg_insert_movimiento ON movimiento




INSTEAD
OF INSERT as
BEGIN
insert into movimiento (mov_fol,con_cla,con_des)
SELECT COALESCE((SELECT MAX(mov_fol) FROM
movimiento) +1, 1),con_cla,con_des FROM inserted
END

Bien esta es la estructura, se encuentran muchos mas
campos, solo que los omito para no hacerlo tan extenso,




el
problema es que me envia error que mov_fol no puede ser
NULL. El insert se realiza desde un procedimiento
almacenado..

ALTER PROC dbo.pduinsertmovimiento
@concla int,
@condes varchar(50),
@lnid int OUTPUT AS
INSERT INTO dbo.movimiento
(con_cla, con_des)
VALUES (@concla, @condes)
SET @lnid=SCOPE_IDENTITY()


bien segun yo el trigger por ser instead la insercion




real
se realiza en este, y aqui es donde se asigna valor al
campo mov_fol, alguien ve que estoy haciendo mal?

muchas gracias.

luis_mtz





.

Respuesta Responder a este mensaje
#3 Maximiliano D. A.
02/04/2004 - 17:05 | Informe spam
Hola, el error esta en el Insert y seguro que ese campo no admite nulos y
por eso chilla el loco :(

lo que me parece extraño es que no funque con el Isnull :(, proba una cosa:

Saca eso fuera y fijate el select que te retorna

Bye


Salu2
Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:


"luis_mtz" escribió en el mensaje
news:1759701c418c2$f2c64a60$


hola Max!

pues mira se me complico pk ya hice lo siguiente..
modifique como indicaste y lo mismo, cree una
tabla 'temporales' y lo puse asi en el TRIGGER..

CREATE TRIGGER trg_insert_movimiento ON dbo.movimiento
INSTEAD OF INSERT as
BEGIN
insert into temporales values (getdate(),"Desde
trigger")
insert into dbo.movimiento (mov_fol,con_cla,con_des)
SELECT (SELECT isnull(MAX(mov_fol),0) + 1
FROM dbo.movimiento),con_cla,con_des FROM inserted
END


y bien me envia el error que mov_fol no puede estar nulo,
y yo esperaba que al menos se insertara en 'temporales'
pero nada, temporales esta vacia despues de realizar.. no
tengo transacciones como para que me revierta el
insert.. ahora mi teoria es que por alguna razon no se
aplica el trigger instead, pero no veo mi error..

gracias.

luis_mtz


hola, lo que yo haria es poner un isnull en el Max y


ponerle 0 o sea si ese
MAx da nulo entonces pone un 0 o lo que fuere

insert into movimiento (mov_fol,con_cla,con_des)
SELECT (SELECT isnull(MAX(mov_fol),0) + 1 FROM
movimiento) ,con_cla,con_des FROM inserted

proba asi a ver que pacha y me decis :D

Bye



Salu2

-


-
Maximiliano Damian Accotto
Gerente de IT
Fundicion San Cayetano S.A.
Buenos Aires Argentina
-
maxi_accotto[arroba]speedy[.]com[.].ar
MSN:



"luis_mtz" escribió


en el mensaje
news:176d601c41848$ab6918c0$

Saludos

Tengo el siguiente trigger...

CREATE TRIGGER trg_insert_movimiento ON movimiento




INSTEAD
OF INSERT as
BEGIN
insert into movimiento (mov_fol,con_cla,con_des)
SELECT COALESCE((SELECT MAX(mov_fol) FROM
movimiento) +1, 1),con_cla,con_des FROM inserted
END

Bien esta es la estructura, se encuentran muchos mas
campos, solo que los omito para no hacerlo tan extenso,




el
problema es que me envia error que mov_fol no puede ser
NULL. El insert se realiza desde un procedimiento
almacenado..

ALTER PROC dbo.pduinsertmovimiento
@concla int,
@condes varchar(50),
@lnid int OUTPUT AS
INSERT INTO dbo.movimiento
(con_cla, con_des)
VALUES (@concla, @condes)
SET @lnid=SCOPE_IDENTITY()


bien segun yo el trigger por ser instead la insercion




real
se realiza en este, y aqui es donde se asigna valor al
campo mov_fol, alguien ve que estoy haciendo mal?

muchas gracias.

luis_mtz





.






Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.618 / Virus Database: 397 - Release Date: 09/03/2004
Respuesta Responder a este mensaje
#4 luis_mtz
02/04/2004 - 17:34 | Informe spam
bien te comento que el select con el Isnull lo ejecute y
me retorna un valor escalar (el consecutivo correcto), el
mov_fol efectivamente no admite nulos, ahora quite el
campo mov_fol de la tabla movimiento, y lo mismo hice en
el trigger, y bingo! funciono :)) pero bueno no es este
el caso que quiero, necesito ese campo consecutivo, que
ocurrira? un bloqueo automatico me impide hacer el select
dentro del trigger instead??


saludos

luis_mtz



Hola, el error esta en el Insert y seguro que ese campo


no admite nulos y
por eso chilla el loco :(

lo que me parece extraño es que no funque con el Isnull :


(, proba una cosa:

Saca eso fuera y fijate el select que te retorna

Bye


Salu2
-


-
Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:
-


-


"luis_mtz" escribió


en el mensaje
news:1759701c418c2$f2c64a60$


hola Max!

pues mira se me complico pk ya hice lo siguiente..
modifique como indicaste y lo mismo, cree una
tabla 'temporales' y lo puse asi en el TRIGGER..

CREATE TRIGGER trg_insert_movimiento ON dbo.movimiento
INSTEAD OF INSERT as
BEGIN
insert into temporales values (getdate(),"Desde
trigger")
insert into dbo.movimiento (mov_fol,con_cla,con_des)
SELECT (SELECT isnull(MAX(mov_fol),0) + 1
FROM dbo.movimiento),con_cla,con_des FROM inserted
END


y bien me envia el error que mov_fol no puede estar nulo,
y yo esperaba que al menos se insertara en 'temporales'
pero nada, temporales esta vacia despues de realizar.. no
tengo transacciones como para que me revierta el
insert.. ahora mi teoria es que por alguna razon no se
aplica el trigger instead, pero no veo mi error..

gracias.

luis_mtz


hola, lo que yo haria es poner un isnull en el Max y


ponerle 0 o sea si ese
MAx da nulo entonces pone un 0 o lo que fuere

insert into movimiento (mov_fol,con_cla,con_des)
SELECT (SELECT isnull(MAX(mov_fol),0) + 1 FROM
movimiento) ,con_cla,con_des FROM inserted

proba asi a ver que pacha y me decis :D

Bye



Salu2






-
-
Maximiliano Damian Accotto
Gerente de IT
Fundicion San Cayetano S.A.
Buenos Aires Argentina





-
maxi_accotto[arroba]speedy[.]com[.].ar
MSN:



"luis_mtz" escribió


en el mensaje
news:176d601c41848$ab6918c0$

Saludos

Tengo el siguiente trigger...

CREATE TRIGGER trg_insert_movimiento ON movimiento




INSTEAD
OF INSERT as
BEGIN
insert into movimiento (mov_fol,con_cla,con_des)
SELECT COALESCE((SELECT MAX(mov_fol) FROM
movimiento) +1, 1),con_cla,con_des FROM inserted
END

Bien esta es la estructura, se encuentran muchos mas
campos, solo que los omito para no hacerlo tan extenso,




el
problema es que me envia error que mov_fol no puede ser
NULL. El insert se realiza desde un procedimiento
almacenado..

ALTER PROC dbo.pduinsertmovimiento
@concla int,
@condes varchar(50),
@lnid int OUTPUT AS
INSERT INTO dbo.movimiento
(con_cla, con_des)
VALUES (@concla, @condes)
SET @lnid=SCOPE_IDENTITY()


bien segun yo el trigger por ser instead la insercion




real
se realiza en este, y aqui es donde se asigna valor al
campo mov_fol, alguien ve que estoy haciendo mal?

muchas gracias.

luis_mtz





.






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


09/03/2004


.

Respuesta Responder a este mensaje
#5 luis_mtz
02/04/2004 - 20:40 | Informe spam
Hola Max!

efectivamente el error estaba en el insert, esto me
llevo a modificar el procedimiento almacenado y quedo de
la siguiente forma..


ALTER PROC dbo.pduinsertmovimiento @concla int,@condes
varchar(50),@lnid int OUTPUT AS
INSERT INTO dbo.movimiento (mov_fol,con_cla, con_des)
VALUES(999,@concla, @condes)
SET @lnid=SCOPE_IDENTITY()


Le di un valor cualquiera en el procedimiento almacenado,
y en el trigger instead se agrega el valor que corresponde.
Es algo curioso, bien esta regla la tendre muy presente.

:))

gracias

luis_mtz


Hola, el error esta en el Insert y seguro que ese campo


no admite nulos y
por eso chilla el loco :(

lo que me parece extraño es que no funque con el Isnull :


(, proba una cosa:

Saca eso fuera y fijate el select que te retorna

Bye


Salu2
-


-
Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:
-


-


"luis_mtz" escribió


en el mensaje
news:1759701c418c2$f2c64a60$


hola Max!

pues mira se me complico pk ya hice lo siguiente..
modifique como indicaste y lo mismo, cree una
tabla 'temporales' y lo puse asi en el TRIGGER..

CREATE TRIGGER trg_insert_movimiento ON dbo.movimiento
INSTEAD OF INSERT as
BEGIN
insert into temporales values (getdate(),"Desde
trigger")
insert into dbo.movimiento (mov_fol,con_cla,con_des)
SELECT (SELECT isnull(MAX(mov_fol),0) + 1
FROM dbo.movimiento),con_cla,con_des FROM inserted
END


y bien me envia el error que mov_fol no puede estar nulo,
y yo esperaba que al menos se insertara en 'temporales'
pero nada, temporales esta vacia despues de realizar.. no
tengo transacciones como para que me revierta el
insert.. ahora mi teoria es que por alguna razon no se
aplica el trigger instead, pero no veo mi error..

gracias.

luis_mtz


hola, lo que yo haria es poner un isnull en el Max y


ponerle 0 o sea si ese
MAx da nulo entonces pone un 0 o lo que fuere

insert into movimiento (mov_fol,con_cla,con_des)
SELECT (SELECT isnull(MAX(mov_fol),0) + 1 FROM
movimiento) ,con_cla,con_des FROM inserted

proba asi a ver que pacha y me decis :D

Bye



Salu2






-
-
Maximiliano Damian Accotto
Gerente de IT
Fundicion San Cayetano S.A.
Buenos Aires Argentina





-
maxi_accotto[arroba]speedy[.]com[.].ar
MSN:



"luis_mtz" escribió


en el mensaje
news:176d601c41848$ab6918c0$

Saludos

Tengo el siguiente trigger...

CREATE TRIGGER trg_insert_movimiento ON movimiento




INSTEAD
OF INSERT as
BEGIN
insert into movimiento (mov_fol,con_cla,con_des)
SELECT COALESCE((SELECT MAX(mov_fol) FROM
movimiento) +1, 1),con_cla,con_des FROM inserted
END

Bien esta es la estructura, se encuentran muchos mas
campos, solo que los omito para no hacerlo tan extenso,




el
problema es que me envia error que mov_fol no puede ser
NULL. El insert se realiza desde un procedimiento
almacenado..

ALTER PROC dbo.pduinsertmovimiento
@concla int,
@condes varchar(50),
@lnid int OUTPUT AS
INSERT INTO dbo.movimiento
(con_cla, con_des)
VALUES (@concla, @condes)
SET @lnid=SCOPE_IDENTITY()


bien segun yo el trigger por ser instead la insercion




real
se realiza en este, y aqui es donde se asigna valor al
campo mov_fol, alguien ve que estoy haciendo mal?

muchas gracias.

luis_mtz





.






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


09/03/2004


.

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