Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

problema con trigger

Estas en el tema de problema con trigger en el foro de SQL Server en Foros del Web. He hecho un trigger para una tabla FOR UPDATE. Desde un programa al guardar unos datos ese trigger se dispara (por lo que digo yo ...
  #1 (permalink)  
Antiguo 03/10/2006, 07:18
 
Fecha de Ingreso: marzo-2005
Mensajes: 276
Antigüedad: 19 años, 2 meses
Puntos: 0
Pregunta problema con trigger

He hecho un trigger para una tabla FOR UPDATE. Desde un programa al guardar unos datos ese trigger se dispara (por lo que digo yo que al guardar los datos hará un update sobre la tabla) el caso es que a causa de ese trigger me sale un error en el programa que me dice "Invalid object name 'updated'." Sé que el error sale por el trigger pq si lo elimino el error no salta, pero... pq dice que es un objeto no válido?? es q no puede saber cual es el último registro actualizado?? cómo puedo decirle al trigger que si el objeto no existe salga?

El código de mi trigger es este:

CREATE TRIGGER [TR_UPDATE] ON [dbo].[PDVLI]
FOR UPDATE
AS

begin

declare @signo varchar(1)
declare @refserie varchar(3)
declare @refnum varchar(15)
declare @linsigno varchar(1)
declare @linserie varchar(3)
declare @reflnum varchar(15)
declare @opa varchar(2)
declare @articulo varchar(20)
declare @grp_id varchar(12)
declare @clave int
declare @clave2 int

/*declare MiCursor cursor for SELECT articulo FROM updated

fetch next from MiCursor into @articulo
if @@Fetch_status=0*/


SELECT @grp_id=GRP_ID, @signo=Signo, @RefSerie=RefSerie, @refnum=RefNum, @linsigno=LinSigno, @linserie=LinSerie, @reflnum=RefLNum, @articulo=articulo FROM updated

/*set @opa= 'VP'*/

SELECT @opa=TipoDoc FROM PDVCA WHERE Signo=@signo and RefSerie=@refserie and RefNum=@refnum and GRP_ID=@grp_id
IF @opa='VP'
set @clave= (SELECT ROW_ID FROM PFA_FUNCDT5HDR WHERE Signo=@linsigno and RefSerie=@refserie and RefNum=@reflnum)

set @clave2= (SELECT ROW_ID FROM PFA_FUNCDTDEV WHERE Signo=@linsigno and RefSerie=@refserie and RefNum=@reflnum)

IF substring(@articulo,1,1)='8' and @opa='VP'

UPDATE PFA_FUNCDT5HDR
SET Signo=@linsigno, RefSerie=@linserie, RefNum=@reflnum, OPA=@opa,C0001='',C0002='',C0003=01/01/1900,C0004=01/01/1900, C0005='', C0006='', C0007='',C0008=0
WHERE ROW_ID=@clave
else
IF substring(@articulo,1,2)='64' OR substring(@articulo,1,2)='65' OR substring(@articulo,1,2)='66' AND @opa='VP'
update PFA_FUNCDT5DEV
SET Signo=@linsigno, RefSerie=@linserie, RefNum=@reflnum,OPA=@opa,C0001=2,C0002=''
WHERE ROW_ID=@clave2
else
IF @opa='VP'
UPDATE PFA_FUNCDT5HDR
SET Signo=@linsigno, RefSerie=@linserie, RefNum=@reflnum, OPA=@opa,C0001='',C0002='',C0003=01/01/1900,C0004=01/01/1900, C0005='', C0006='', C0007='',C0008=0
WHERE ROW_ID=@clave

update PFA_FUNCDT5DEV
SET Signo=@linsigno, RefSerie=@linserie, RefNum=@reflnum,OPA=@opa,C0001=2,C0002=''
WHERE ROW_ID=@clave2

end

el error esta en lo resaltado
  #2 (permalink)  
Antiguo 03/10/2006, 17:29
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Mismo caso de tu pregunta anterior, elimina las variables dentro. Adicionalmente, usar cursores dentro de un trigger es pecado!! Matas el rendimiento de cada update.

Prueba con cosas como estas:

update PFA_FUNCDT5DEV
SET PFA_FUNCDT5DEV.campo = updated.campo,
PFA_FUNCDT5DEV.otrocampo = updated.otrocampo,
FROM PFA_FUNCDT5DEV
INNER JOIN updated
ON PFA_FUNCDT5DEV.llave = updated.llave
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #3 (permalink)  
Antiguo 04/10/2006, 07:30
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
yo te recomendaria que no usaras trigers...
si tienes una alternativa para evitarlos... usala...
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #4 (permalink)  
Antiguo 04/10/2006, 17:03
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Cita:
Iniciado por Andres95 Ver Mensaje
yo te recomendaria que no usaras trigers...
si tienes una alternativa para evitarlos... usala...
Y la razón para recomendar eso es .....
  #5 (permalink)  
Antiguo 05/10/2006, 09:28
 
Fecha de Ingreso: marzo-2005
Mensajes: 276
Antigüedad: 19 años, 2 meses
Puntos: 0
Para saber como y cuando utilizarlos primero deberé aprender... o tú naciste sabiendo?
  #6 (permalink)  
Antiguo 05/10/2006, 09:43
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
perdon no es con la intencion de ofender... es solo lo que me ha tocado ver en la chamba... se ahorra uno muchos problemas si le saca la vuelta a los trigers...

un saludo
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:03.