Ayuda con Trigger

28/10/2004 - 22:07 por Gustavo Venturo | Informe spam
Hola a todos, tengo la siguiente tabla
Tabla1
idReq (AUTONUMERICO, Clave)
idMat INT,
Marca NVARCHAR(70)
Color NVARCHAR(20)
Prov1 NVARCHAR(10)
Precio1 MONEY
Prov2 NVARCHAR(10)
Precio2 MONEY
Prov3 NVARCHAR(10)
Precio3 MONEY
VBObra BIT
Necesito crear un Trigger que me permita en caso de ingresar y/o editar un
insumo ya existente en la tabla (idMat, Marca, Color), me asigne el ultimo
Prov1, Precio1, Prov2, Precio2, Prov3, Precio3 asignado a ese insumo.

He Intentado con este trigger, pero no me resulta y no se como resolver el
caso de que se inserte un nuevo registro

CREATE TRIGGER CompletarPrecios ON [dbo].[tblLogistica1]
FOR UPDATE

AS
DECLARE @Prov1 NVARCHAR(10)
DECLARE @Prov2 NVARCHAR(10)
DECLARE @Prov3 NVARCHAR(10)
DECLARE @Precio1 MONEY
DECLARE @Precio2 MONEY
DECLARE @Precio3 MONEY
DECLARE @idMat INT
DECLARE @Marca NVARCHAR(70)
DECLARE @Color NVARCHAR(20)
DECLARE @idReq INT

SELECT @idReq=idReq, @idMat=idMaterial, @Marca=Marca,
@Color=Color FROM Inserted
SELECT TOP 1 @Prov1=Prov1, @Precio1=Precio1, @Prov2=Prov2, @Precio2 Precio2, @Prov3=Prov3, @Precio3=Precio3, @Prov4=Prov4, @Precio4=Precio4
FROM tblLogistica1 WHERE idMat=@idmat AND
Marca=@Marca AND Color=@Color AND idReq<>@idReq ORDER BY idReq DESC
IF @Precio1 IS NULL
set @Precio1=0
IF @Precio2 IS NULL
set @Precio2=0
IF @Precio3 IS NULL
set @Precio3=0
IF @Precio4 IS NULL
set @Precio4=0

IF UPDATE(VBObra)
BEGIN
UPDATE tblLogistica1 SET Prov1=@Prov1, Precio1=@Precio1, Prov2=@Prov2,
Precio2=@Precio2,
Prov3=@Prov3, Precio3=@Precio3 WHERE idReq=@idReq
END


Gracias por los aportes

Preguntas similare

Leer las respuestas

#1 Maxi
28/10/2004 - 22:14 | Informe spam
gustavo, lo que quieres hacer lo deberias hacer con un Trigger del tipo
"Instead Of" En lugar de

De todas formas quedia medio feo este tipo de diseños!! porque permites la
duplicacion de registros?

Si es una tabla de movimientos donde se necesita por movimiento que se
ingrese el precio de compra del maestro!! podrias implementar un default y
en ese poner una UDF

O mejor en tus SP del CRUD meter la logica :-)


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



"Gustavo Venturo" <gventuro@ quita esto vain-arm.cl> escribió en el mensaje
news:OL4v%
Hola a todos, tengo la siguiente tabla
Tabla1
idReq (AUTONUMERICO, Clave)
idMat INT,
Marca NVARCHAR(70)
Color NVARCHAR(20)
Prov1 NVARCHAR(10)
Precio1 MONEY
Prov2 NVARCHAR(10)
Precio2 MONEY
Prov3 NVARCHAR(10)
Precio3 MONEY
VBObra BIT
Necesito crear un Trigger que me permita en caso de ingresar y/o editar un
insumo ya existente en la tabla (idMat, Marca, Color), me asigne el ultimo
Prov1, Precio1, Prov2, Precio2, Prov3, Precio3 asignado a ese insumo.

He Intentado con este trigger, pero no me resulta y no se como resolver el
caso de que se inserte un nuevo registro

CREATE TRIGGER CompletarPrecios ON [dbo].[tblLogistica1]
FOR UPDATE

AS
DECLARE @Prov1 NVARCHAR(10)
DECLARE @Prov2 NVARCHAR(10)
DECLARE @Prov3 NVARCHAR(10)
DECLARE @Precio1 MONEY
DECLARE @Precio2 MONEY
DECLARE @Precio3 MONEY
DECLARE @idMat INT
DECLARE @Marca NVARCHAR(70)
DECLARE @Color NVARCHAR(20)
DECLARE @idReq INT

SELECT @idReq=idReq, @idMat=idMaterial, @Marca=Marca,
@Color=Color FROM Inserted
SELECT TOP 1 @Prov1=Prov1, @Precio1=Precio1, @Prov2=Prov2, @Precio2> Precio2, @Prov3=Prov3, @Precio3=Precio3, @Prov4=Prov4, @Precio4=Precio4
FROM tblLogistica1 WHERE idMat=@idmat AND
Marca=@Marca AND Color=@Color AND idReq<>@idReq ORDER BY idReq DESC
IF @Precio1 IS NULL
set @Precio1=0
IF @Precio2 IS NULL
set @Precio2=0
IF @Precio3 IS NULL
set @Precio3=0
IF @Precio4 IS NULL
set @Precio4=0

IF UPDATE(VBObra)
BEGIN
UPDATE tblLogistica1 SET Prov1=@Prov1, Precio1=@Precio1, Prov2=@Prov2,
Precio2=@Precio2,
Prov3=@Prov3, Precio3=@Precio3 WHERE idReq=@idReq
END


Gracias por los aportes







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.781 / Virus Database: 527 - Release Date: 21/10/2004
Respuesta Responder a este mensaje
#2 Gustavo Venturo
28/10/2004 - 22:36 | Informe spam
Maxi, es necesaria la duplicidad de registros a la que tu haces referencia,
debido a que debo llevar un registro de cuando y por que se requerien estos
insumos (campos que no son relevantes para la solución que requiero y por
eso no los mencione)
y la actualizacion de los distintos campo se produce en tiempos diferentes,
debido a procesos que van modificando la información.


"Maxi" escribió en el mensaje
news:
gustavo, lo que quieres hacer lo deberias hacer con un Trigger del tipo
"Instead Of" En lugar de

De todas formas quedia medio feo este tipo de diseños!! porque permites la
duplicacion de registros?

Si es una tabla de movimientos donde se necesita por movimiento que se
ingrese el precio de compra del maestro!! podrias implementar un default y
en ese poner una UDF

O mejor en tus SP del CRUD meter la logica :-)


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



"Gustavo Venturo" <gventuro@ quita esto vain-arm.cl> escribió en el


mensaje
news:OL4v%
> Hola a todos, tengo la siguiente tabla
> Tabla1
> idReq (AUTONUMERICO, Clave)
> idMat INT,
> Marca NVARCHAR(70)
> Color NVARCHAR(20)
> Prov1 NVARCHAR(10)
> Precio1 MONEY
> Prov2 NVARCHAR(10)
> Precio2 MONEY
> Prov3 NVARCHAR(10)
> Precio3 MONEY
> VBObra BIT
> Necesito crear un Trigger que me permita en caso de ingresar y/o editar


un
> insumo ya existente en la tabla (idMat, Marca, Color), me asigne el


ultimo
> Prov1, Precio1, Prov2, Precio2, Prov3, Precio3 asignado a ese insumo.
>
> He Intentado con este trigger, pero no me resulta y no se como resolver


el
> caso de que se inserte un nuevo registro
>
> CREATE TRIGGER CompletarPrecios ON [dbo].[tblLogistica1]
> FOR UPDATE
>
> AS
> DECLARE @Prov1 NVARCHAR(10)
> DECLARE @Prov2 NVARCHAR(10)
> DECLARE @Prov3 NVARCHAR(10)
> DECLARE @Precio1 MONEY
> DECLARE @Precio2 MONEY
> DECLARE @Precio3 MONEY
> DECLARE @idMat INT
> DECLARE @Marca NVARCHAR(70)
> DECLARE @Color NVARCHAR(20)
> DECLARE @idReq INT
>
> SELECT @idReq=idReq, @idMat=idMaterial, @Marca=Marca,
> @Color=Color FROM Inserted
> SELECT TOP 1 @Prov1=Prov1, @Precio1=Precio1, @Prov2=Prov2, @Precio2> > Precio2, @Prov3=Prov3, @Precio3=Precio3, @Prov4=Prov4, @Precio4=Precio4
> FROM tblLogistica1 WHERE idMat=@idmat AND
> Marca=@Marca AND Color=@Color AND idReq<>@idReq ORDER BY idReq DESC
> IF @Precio1 IS NULL
> set @Precio1=0
> IF @Precio2 IS NULL
> set @Precio2=0
> IF @Precio3 IS NULL
> set @Precio3=0
> IF @Precio4 IS NULL
> set @Precio4=0
>
> IF UPDATE(VBObra)
> BEGIN
> UPDATE tblLogistica1 SET Prov1=@Prov1, Precio1=@Precio1,


Prov2=@Prov2,
> Precio2=@Precio2,
> Prov3=@Prov3, Precio3=@Precio3 WHERE idReq=@idReq
> END
>
>
> Gracias por los aportes
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.781 / Virus Database: 527 - Release Date: 21/10/2004


Respuesta Responder a este mensaje
#3 Maxi
28/10/2004 - 22:40 | Informe spam
ok, entonces o en los SP que hacen el insert pones la logica o sino vas a
tener que armar un Trigger Instead OF


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



"Gustavo Venturo" <gventuro@ quita esto vain-arm.cl> escribió en el mensaje
news:
Maxi, es necesaria la duplicidad de registros a la que tu haces
referencia,
debido a que debo llevar un registro de cuando y por que se requerien
estos
insumos (campos que no son relevantes para la solución que requiero y por
eso no los mencione)
y la actualizacion de los distintos campo se produce en tiempos
diferentes,
debido a procesos que van modificando la información.


"Maxi" escribió en el mensaje
news:
gustavo, lo que quieres hacer lo deberias hacer con un Trigger del tipo
"Instead Of" En lugar de

De todas formas quedia medio feo este tipo de diseños!! porque permites
la
duplicacion de registros?

Si es una tabla de movimientos donde se necesita por movimiento que se
ingrese el precio de compra del maestro!! podrias implementar un default
y
en ese poner una UDF

O mejor en tus SP del CRUD meter la logica :-)


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



"Gustavo Venturo" <gventuro@ quita esto vain-arm.cl> escribió en el


mensaje
news:OL4v%
> Hola a todos, tengo la siguiente tabla
> Tabla1
> idReq (AUTONUMERICO, Clave)
> idMat INT,
> Marca NVARCHAR(70)
> Color NVARCHAR(20)
> Prov1 NVARCHAR(10)
> Precio1 MONEY
> Prov2 NVARCHAR(10)
> Precio2 MONEY
> Prov3 NVARCHAR(10)
> Precio3 MONEY
> VBObra BIT
> Necesito crear un Trigger que me permita en caso de ingresar y/o editar


un
> insumo ya existente en la tabla (idMat, Marca, Color), me asigne el


ultimo
> Prov1, Precio1, Prov2, Precio2, Prov3, Precio3 asignado a ese insumo.
>
> He Intentado con este trigger, pero no me resulta y no se como resolver


el
> caso de que se inserte un nuevo registro
>
> CREATE TRIGGER CompletarPrecios ON [dbo].[tblLogistica1]
> FOR UPDATE
>
> AS
> DECLARE @Prov1 NVARCHAR(10)
> DECLARE @Prov2 NVARCHAR(10)
> DECLARE @Prov3 NVARCHAR(10)
> DECLARE @Precio1 MONEY
> DECLARE @Precio2 MONEY
> DECLARE @Precio3 MONEY
> DECLARE @idMat INT
> DECLARE @Marca NVARCHAR(70)
> DECLARE @Color NVARCHAR(20)
> DECLARE @idReq INT
>
> SELECT @idReq=idReq, @idMat=idMaterial, @Marca=Marca,
> @Color=Color FROM Inserted
> SELECT TOP 1 @Prov1=Prov1, @Precio1=Precio1, @Prov2=Prov2, @Precio2>> > Precio2, @Prov3=Prov3, @Precio3=Precio3, @Prov4=Prov4, @Precio4=Precio4
> FROM tblLogistica1 WHERE idMat=@idmat AND
> Marca=@Marca AND Color=@Color AND idReq<>@idReq ORDER BY idReq DESC
> IF @Precio1 IS NULL
> set @Precio1=0
> IF @Precio2 IS NULL
> set @Precio2=0
> IF @Precio3 IS NULL
> set @Precio3=0
> IF @Precio4 IS NULL
> set @Precio4=0
>
> IF UPDATE(VBObra)
> BEGIN
> UPDATE tblLogistica1 SET Prov1=@Prov1, Precio1=@Precio1,


Prov2=@Prov2,
> Precio2=@Precio2,
> Prov3=@Prov3, Precio3=@Precio3 WHERE idReq=@idReq
> END
>
>
> Gracias por los aportes
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.781 / Virus Database: 527 - Release Date: 21/10/2004











Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.781 / Virus Database: 527 - Release Date: 21/10/2004
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida