Un trigger de fechas

26/06/2006 - 17:37 por Anl. Geovanny Tomalá | Informe spam
Saludos a los miembros del grupo de noticias, tengo un problemita
actualmente tengo un trigger el cual no me debe permitir actualizaciones de
fechas superiores a la fecha de envío de un x producto con la sentencia
DATEDIFF el query me arroja valores menores a cero cuando la fecha de
asignación (ent_fecha_asignacon) es mayor a la fecha de envío
(ent_fecha_envio) este triger la tengo en producción pero no esta trabajando
de la forma como se requiere, si alguien me podría ayudar con la corrección
del cdoigo del trigger se lo agradecería mucho.

create trigger trg_ProtbEntrega
on protbEntrega for update
as
begin
if update(ent_fecha_asignacion)
begin
if ((select datediff(month,b.ent_fecha_asignacion,a.ent_fecha_envio) from
protbentrega a, deleted b
where a.ent_codigo=b.ent_codigo and a.pro_codigo=b.pro_codigo and
a.suc_codigo=b.suc_codigo)<0)
begin
raiserror ('Error, la fecha de asignación no puede ser mayor al mes de
ingreso del producto', 16, -1)
rollback transaction
end
end
end

Saludos cordiales,

Anl. Geovanny Tomalá

Preguntas similare

Leer las respuestas

#1 Isaias
26/06/2006 - 19:10 | Informe spam
Geovanny

Primero, debes utlizar JOIN en lugar de hacer una union con WHERE, segundo,
estas comparando una diferencia con MESES, ¿Es correcto?, si dices que NO
debe ser la FECHA MAYOR a la del ENVIO, entonces deberias comparar con >=,
¿cierto?
Saludos
IIslas


"Anl. Geovanny Tomalá" wrote:

Saludos a los miembros del grupo de noticias, tengo un problemita
actualmente tengo un trigger el cual no me debe permitir actualizaciones de
fechas superiores a la fecha de envío de un x producto con la sentencia
DATEDIFF el query me arroja valores menores a cero cuando la fecha de
asignación (ent_fecha_asignacon) es mayor a la fecha de envío
(ent_fecha_envio) este triger la tengo en producción pero no esta trabajando
de la forma como se requiere, si alguien me podría ayudar con la corrección
del cdoigo del trigger se lo agradecería mucho.

create trigger trg_ProtbEntrega
on protbEntrega for update
as
begin
if update(ent_fecha_asignacion)
begin
if ((select datediff(month,b.ent_fecha_asignacion,a.ent_fecha_envio) from
protbentrega a, deleted b
where a.ent_codigo=b.ent_codigo and a.pro_codigo=b.pro_codigo and
a.suc_codigo=b.suc_codigo)<0)
begin
raiserror ('Error, la fecha de asignación no puede ser mayor al mes de
ingreso del producto', 16, -1)
rollback transaction
end
end
end

Saludos cordiales,

Anl. Geovanny Tomalá



Respuesta Responder a este mensaje
#2 Alejandro Mesa
26/06/2006 - 19:14 | Informe spam
Trata:

tengo un problemita
actualmente tengo un trigger el cual no me debe permitir actualizaciones de
fechas superiores a la fecha de envío de un x producto



create trigger trg_ProtbEntrega on dbo.protbEntrega
for update
as

if update(ent_fecha_asignacion)
begin
if exists(
select
*
from
inserted as i
inner join
deleted as d
on i.ent_codigo = d.ent_codigo
and i.pro_codigo = d.pro_codigo
and i.suc_codigo = d.suc_codigo
where
i.ent_fecha_asignacion > d.ent_fecha_envio
)

begin
raiserror ('Error, la fecha de asignación no puede ser mayor al mes de
ingreso del producto', 16, 1)
rollback transaction
end
end
go

Si la diferencia debe ser tratada en meses, entonces usa la siguiente
expresion en la clause=ula "where".

datediff(month, d.ent_fecha_envio, i.ent_fecha_asignacion) > 1


AMB


"Anl. Geovanny Tomalá" wrote:

Saludos a los miembros del grupo de noticias, tengo un problemita
actualmente tengo un trigger el cual no me debe permitir actualizaciones de
fechas superiores a la fecha de envío de un x producto con la sentencia
DATEDIFF el query me arroja valores menores a cero cuando la fecha de
asignación (ent_fecha_asignacon) es mayor a la fecha de envío
(ent_fecha_envio) este triger la tengo en producción pero no esta trabajando
de la forma como se requiere, si alguien me podría ayudar con la corrección
del cdoigo del trigger se lo agradecería mucho.

create trigger trg_ProtbEntrega
on protbEntrega for update
as
begin
if update(ent_fecha_asignacion)
begin
if ((select datediff(month,b.ent_fecha_asignacion,a.ent_fecha_envio) from
protbentrega a, deleted b
where a.ent_codigo=b.ent_codigo and a.pro_codigo=b.pro_codigo and
a.suc_codigo=b.suc_codigo)<0)
begin
raiserror ('Error, la fecha de asignación no puede ser mayor al mes de
ingreso del producto', 16, -1)
rollback transaction
end
end
end

Saludos cordiales,

Anl. Geovanny Tomalá



Respuesta Responder a este mensaje
#3 qwalgrande
26/06/2006 - 19:34 | Informe spam
Hola.

Varias cosas. La primera, el uso de triggers, tema en el que me repito, no
los uses si puedes, sólo traen problemas.

Por otra parte, da la sensación de que el campo que deseas verificar es del
mismo registro que el modificado. De ser así, no necesitas utilizar un
trigger, puedes hacer lo mismo con una constraint.

Y por último, ese rollback, por concepto deberías quitarlo de ahí. En
general, lo suyo es finalizar únicamente las transacciones que se iniciaron
en el ámbito. Tú aquí estás haciendo un rollback de una supuesta o supuestas
transacciones que se iniciaron antes de llegar al trigger. Se debería
informar del error para que el ámbito en que se inició la transacción decida
si finalizar o no la transacción.

En cualquier caso, si nos puedes comentar el comportamiento que está
teniendo el trigger, a lo mejor podemos afinar un poco más.

Alberto López Grande (qwalgrande)


"Anl. Geovanny Tomalá" escribió en el mensaje
news:
Saludos a los miembros del grupo de noticias, tengo un problemita
actualmente tengo un trigger el cual no me debe permitir actualizaciones
de fechas superiores a la fecha de envío de un x producto con la sentencia
DATEDIFF el query me arroja valores menores a cero cuando la fecha de
asignación (ent_fecha_asignacon) es mayor a la fecha de envío
(ent_fecha_envio) este triger la tengo en producción pero no esta
trabajando de la forma como se requiere, si alguien me podría ayudar con
la corrección del cdoigo del trigger se lo agradecería mucho.

create trigger trg_ProtbEntrega
on protbEntrega for update
as
begin
if update(ent_fecha_asignacion)
begin
if ((select datediff(month,b.ent_fecha_asignacion,a.ent_fecha_envio) from
protbentrega a, deleted b
where a.ent_codigo=b.ent_codigo and a.pro_codigo=b.pro_codigo
and a.suc_codigo=b.suc_codigo)<0)
begin
raiserror ('Error, la fecha de asignación no puede ser mayor al mes de
ingreso del producto', 16, -1)
rollback transaction
end
end
end

Saludos cordiales,

Anl. Geovanny Tomalá


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