error al ejecutar update con trigger en la tabla

13/04/2004 - 00:19 por Gustavo Villaran | Informe spam
hola,

estoy tratando de hacer un update a una tabla en la cual modifico un solo
campo,
al terminar el update, este debe disparar un trigger que graba en otra
tabla, el tipo
de operacion que se hizo sobre la tabla anterior y el valor de los campos
modificados,
esta sirve para auditoria.

al ejecutar un update sobre la tabla me sale el error siguiente :

Process 67 unlocking unowned resource: TAB: 10:334884510

alguien sabe como solucionar esto?

gracias

Preguntas similare

Leer las respuestas

#1 Maximiliano Damian Accotto
13/04/2004 - 00:27 | Informe spam
Hola, sin la estructura del trigger y tablas es casi imposible ayudarte!!
podrias ser tan amable de darnos mas informacion?

gracias


Salu2 enormes

Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
-
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...efault.asp
-
(maxi_accotto[arroba]speedy.com.ar)
MSN:
-

"Gustavo Villaran" escribió en el mensaje
news:
hola,

estoy tratando de hacer un update a una tabla en la cual modifico un solo
campo,
al terminar el update, este debe disparar un trigger que graba en otra
tabla, el tipo
de operacion que se hizo sobre la tabla anterior y el valor de los campos
modificados,
esta sirve para auditoria.

al ejecutar un update sobre la tabla me sale el error siguiente :

Process 67 unlocking unowned resource: TAB: 10:334884510

alguien sabe como solucionar esto?

gracias


Respuesta Responder a este mensaje
#2 Gustavo Villaran
13/04/2004 - 01:05 | Informe spam
le dije al programador que me pasara el codigo del trigger y aqui esta :

CREATE TRIGGER ut_i_regusr_RSC_RESERV ON RSC_RESERV FOR INSERT, UPDATE,
DELETE
AS
DECLARE @li_id_proceso integer,
@ls_codhot varchar(3),
@ls_codalm varchar(3),
@ls_usuari varchar(8),
@ls_codtab char(15),
@ls_codcam char(15),
@ln_indins integer,
@ln_indmod integer,
@ln_indeli integer,
@ln_indran integer,
@ln_valmin integer,
@ln_valmax integer,
@ls_operac char(9),
@li_indins integer,
@li_indmod integer,
@li_indeli integer,
@ls_deslla varchar(100),
@ls_cadena varchar(100),
@ls_val_del varchar(100),
@ls_val_ins varchar(100),
@ls_val_clave varchar(100),
@ls_cadena_clave varchar(100),
@ldt_fecha datetime,
@li_numreg integer,
@ls_sentencia_del varchar(100),
@ls_sentencia_ins varchar(100),
@ls_sentencia_ins_null varchar(250),
@ls_sentencia varchar(500),
@li_valor integer,
@ls_apos varchar(1),
@li_open_cursor integer

BEGIN
select @li_open_cursor = 0
select @ls_apos = char(39)
select @ldt_fecha = getdate()

exec usp_u_id_proceso @li_id_proceso output

obtener los valores del hotel y de la localidad
select @ls_codhot = ist_codhot,
@ls_codalm = ist_codalm,
@ls_usuari = ist_usuari
from CMT_INGSIS WITH (NOLOCK)
where ist_iningr = @li_id_proceso

select * into #1del from deleted
select * into #1ins from inserted

select @ls_deslla = ttm_deslla
from cmm_tabtab
where ttm_codtab = 'RSC_RESERV'

select @ls_cadena_clave = 'select ' + @ls_deslla + ' from #1del'

If(select count(*) from deleted ) = 0 and (select count(*) from inserted)
0


begin
select @ls_operac = 'INSERTA'
select @ls_cadena_clave = 'select ' + @ls_deslla + ' from #1ins'
DECLARE C_PARAUD_INS_RSC_RESERV CURSOR FOR
select pau_codtab, pau_codcam, pau_indins, pau_indmod,
pau_indeli, pau_indran, pau_valmin, pau_valmax
from cmm_paraud
where htc_codhot = @ls_codhot
and pau_codloc = @ls_codalm
and pau_codtab = 'RSC_RESERV'
and pau_chkeli = 0
and pau_indins = 1
set @li_open_cursor = 1
end

If(select count(*) from deleted ) > 0 and (select count(*) from inserted)
0


begin
select @ls_operac = 'ACTUALIZA'
DECLARE C_PARAUD_ACT_RSC_RESERV CURSOR FOR
select pau_codtab, pau_codcam, pau_indins, pau_indmod,
pau_indeli, pau_indran, pau_valmin, pau_valmax
from cmm_paraud
where htc_codhot = @ls_codhot
and pau_codloc = @ls_codalm
and pau_codtab = 'RSC_RESERV'
and pau_chkeli = 0
and pau_indmod = 1
set @li_open_cursor = 1
end

If(select count(*) from deleted ) > 0 and (select count(*) from inserted)
= 0
begin
select @ls_operac = 'ELIMINA'
DECLARE C_PARAUD_ELI_RSC_RESERV CURSOR FOR
select pau_codtab, pau_codcam, pau_indins, pau_indmod,
pau_indeli, pau_indran, pau_valmin, pau_valmax
from cmm_paraud
where htc_codhot = @ls_codhot
and pau_codloc = @ls_codalm
and pau_codtab = 'RSC_RESERV'
and pau_chkeli = 0
and pau_indeli = 1
set @li_open_cursor = 1
end

if @li_open_cursor = 0 return

If @ls_operac = 'INSERTA'
begin
OPEN C_PARAUD_INS_RSC_RESERV;
FETCH NEXT FROM C_PARAUD_INS_RSC_RESERV INTO @ls_codtab, @ls_codcam,
@ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin, @ln_valmax

WHILE @@FETCH_STATUS = 0
BEGIN
auditables
select @ls_sentencia_ins = 'SELECT '+ @ls_codcam +' FROM #1ins'

select @li_numreg = count(*) from CMR_REGUSR
if @li_numreg = 0
begin
select @li_numreg = 1
end
else
begin
select @li_numreg = max(isnull(RUR_NUMREG,0)) from CMR_REGUSR
select @li_numreg = @li_numreg + 1
end

begin tran
INSERT INTO CMR_REGUSR (HTC_CODHOT, ALM_CODALM, RUR_NUMREG,
RUR_USUARI, RUR_TABAFE, RUR_CAMTAB,
RUR_CLAREG,
RUR_FECREG, RUR_OPERAC, DUR_DATACT,
RUR_CHKELI,
RUR_CLAVAL)
exec ('SELECT ' + @ls_apos + @ls_codhot + @ls_apos + ', ' +
@ls_apos + @ls_codalm + @ls_apos + ', ' + @li_numreg + ', ' +
@ls_apos + @ls_usuari + @ls_apos + ', ' + @ls_apos +
@ls_codtab + @ls_apos + ', ' + @ls_apos + @ls_codcam + @ls_apos + ', ' +
@ls_apos + @ls_deslla + @ls_apos + ', ' +
@ls_apos + @ldt_fecha + @ls_apos + ', ' + @ls_apos +
@ls_operac + @ls_apos + ', ' + '(' + @ls_sentencia_ins + ')' + ', ' + '0' +
', ' +
'(' + @ls_cadena_clave + ')')

delete from CMR_REGUSR
where DUR_DATACT IS NULL

if @ln_indran = 1
begin
delete from CMR_REGUSR
where HTC_CODHOT = @ls_codhot
and ALM_CODALM = @ls_codalm
and RUR_TABAFE = @ls_codtab
and RUR_CAMTAB = @ls_codcam
and convert(decimal(9,3),DUR_DATACT) >= @ln_valmin
and convert(decimal(9,3),DUR_DATACT) <= @ln_valmax
end
commit tran

FETCH NEXT FROM C_PARAUD_INS_RSC_RESERV INTO @ls_codtab,
@ls_codcam, @ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin,
@ln_valmax
end
CLOSE C_PARAUD_INS_RSC_RESERV;
DEALLOCATE C_PARAUD_INS_RSC_RESERV;
end

if @ls_operac = 'ACTUALIZA'
BEGIN
OPEN C_PARAUD_ACT_RSC_RESERV;
FETCH NEXT FROM C_PARAUD_ACT_RSC_RESERV INTO @ls_codtab, @ls_codcam,
@ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin, @ln_valmax

WHILE @@FETCH_STATUS = 0
BEGIN
auditables
select @ls_sentencia_del = 'SELECT '+ @ls_codcam +' FROM #1del'
select @ls_sentencia_ins = 'SELECT '+ @ls_codcam +' FROM #1ins'

select @li_numreg = count(*) from CMR_REGUSR
if @li_numreg = 0
begin
select @li_numreg = 1
end
else
begin
select @li_numreg = max(isnull(RUR_NUMREG,0)) from CMR_REGUSR
select @li_numreg = @li_numreg + 1
end

begin tran
INSERT INTO CMR_REGUSR (HTC_CODHOT, ALM_CODALM, RUR_NUMREG,
RUR_DATANT,
RUR_USUARI, RUR_TABAFE, RUR_CAMTAB,
RUR_CLAREG,
RUR_FECREG, RUR_OPERAC, DUR_DATACT,
RUR_CHKELI,
RUR_CLAVAL)
exec ('SELECT ' + @ls_apos + @ls_codhot + @ls_apos + ', ' +
@ls_apos + @ls_codalm + @ls_apos + ', ' + @li_numreg + ', ' + '(' +
@ls_sentencia_del + ')' + ', ' +
@ls_apos + @ls_usuari + @ls_apos + ', ' + @ls_apos +
@ls_codtab + @ls_apos + ', ' + @ls_apos + @ls_codcam + @ls_apos + ', ' +
@ls_apos + @ls_deslla + @ls_apos + ', ' +
@ls_apos + @ldt_fecha + @ls_apos + ', ' + @ls_apos +
@ls_operac + @ls_apos + ', ' + '(' + @ls_sentencia_ins + ')' + ', ' + '0' +
', ' +
'(' + @ls_cadena_clave + ')')

delete from CMR_REGUSR
where DUR_DATACT = RUR_DATANT
or ( dur_DATACT is null
and RUR_DATANT is null )

if @ln_indran = 1
begin
delete from CMR_REGUSR
where HTC_CODHOT = @ls_codhot
and ALM_CODALM = @ls_codalm
and RUR_TABAFE = @ls_codtab
and RUR_CAMTAB = @ls_codcam
and convert(decimal(9,3),DUR_DATACT) >= @ln_valmin
and convert(decimal(9,3),DUR_DATACT) <= @ln_valmax

end
commit tran

FETCH NEXT FROM C_PARAUD_ACT_RSC_RESERV INTO @ls_codtab,
@ls_codcam, @ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin,
@ln_valmax
END
CLOSE C_PARAUD_ACT_RSC_RESERV;
DEALLOCATE C_PARAUD_ACT_RSC_RESERV;
END

If @ls_operac = 'ELIMINA'
begin
OPEN C_PARAUD_ELI_RSC_RESERV;
FETCH NEXT FROM C_PARAUD_ELI_RSC_RESERV INTO @ls_codtab, @ls_codcam,
@ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin, @ln_valmax

WHILE @@FETCH_STATUS = 0

BEGIN
auditables
select @ls_sentencia_del = 'SELECT '+ @ls_codcam +' FROM #1del'

select @li_numreg = count(*) from CMR_REGUSR
if @li_numreg = 0
begin
select @li_numreg = 1
end
else
begin
select @li_numreg = max(isnull(RUR_NUMREG,0)) from CMR_REGUSR
select @li_numreg = @li_numreg + 1
end

begin tran
INSERT INTO CMR_REGUSR (HTC_CODHOT, ALM_CODALM, RUR_NUMREG,
RUR_DATANT,
RUR_USUARI, RUR_TABAFE, RUR_CAMTAB,
RUR_CLAREG,
RUR_FECREG, RUR_OPERAC, RUR_CHKELI,
RUR_CLAVAL)
exec ('SELECT ' + @ls_apos + @ls_codhot + @ls_apos + ', ' +
@ls_apos + @ls_codalm + @ls_apos + ', ' + @li_numreg + ', ' + '(' +
@ls_sentencia_del + ')' + ', ' +
@ls_apos + @ls_usuari + @ls_apos + ', ' + @ls_apos +
@ls_codtab + @ls_apos + ', ' + @ls_apos + @ls_codcam + @ls_apos + ', ' +
@ls_apos + @ls_deslla + @ls_apos + ', ' +
@ls_apos + @ldt_fecha + @ls_apos + ', ' + @ls_apos +
@ls_operac + @ls_apos + ', ' + '0' + ', ' +
'(' + @ls_cadena_clave + ')')
commit tran

FETCH NEXT FROM C_PARAUD_ELI_RSC_RESERV INTO @ls_codtab,
@ls_codcam, @ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin,
@ln_valmax
END
CLOSE C_PARAUD_ELI_RSC_RESERV;
DEALLOCATE C_PARAUD_ELI_RSC_RESERV;
end
END

TABLA QUE ESTUVO PROBANDO (RSC_RESERV)

3 HTC_CODHOT char 3 0
2 RSC_CODLOC char 3 0
2 RSC_NUMRES char 10 0
0 CLM_CODCLI char 10 1
0 COM_CODCOU char 7 1
0 RSC_TIPGRU varchar 2 1
0 RSC_NOMGRU varchar 100 1
0 RSC_TIPMER varchar 5 1
0 RSC_OPEREF varchar 10 1
0 RSC_EMPREF varchar 100 1
0 RSC_RESAGE varchar 10 1
0 RSC_FECRES datetime 8 1
0 RSC_FECING datetime 8 1
0 RSC_FECSAL datetime 8 1
0 RSC_NUMNOC int 4 1
0 RSC_DIACON int 4 1
0 RSC_DIACRE int 4 1
0 RSC_CANPAX smallint 2 1
0 RSC_VIALLE varchar 1 1
0 RSC_HORLLE datetime 8 1
0 RSC_EMPLLE varchar 4 1
0 RSC_VUELLE int 4 1
0 RSC_VIASAL varchar 1 1
0 RSC_HORSAL datetime 8 1
0 RSC_EMPSAL varchar 4 1
0 RSC_VUESAL int 4 1
0 RSC_FECREC datetime 8 1
0 RSC_IMPIGV bit 1 1
0 RSC_PORIGV decimal 9 1
0 RSC_CARSER bit 1 1
0 RSC_PORSER decimal 9 1
0 RSC_ESTRES char 2 1
0 RSC_ESTMUL char 2 1
0 RSC_FECEMI datetime 8 1
0 RSC_FECCON datetime 8 1
0 RSC_FECANU datetime 8 1
0 RSC_FECCAN datetime 8 1
0 RSC_TIPMON varchar 1 1
0 RSC_TIPCOM decimal 9 1
0 RSC_TIPVEN decimal 9 1
0 RSC_PORDES decimal 9 1
0 RSC_TOTSOL decimal 9 1
0 RSC_TOTDOL decimal 9 1
0 RSC_DESFAC char 3 1
0 RSC_MODDIV bit 1 1
0 RSC_TIPFAC char 2 1
0 RSC_EMPFAC char 10 1
0 RSC_FORRES char 2 1
0 RSC_NOMTOU char 5 1
0 RSC_CHKING bit 1 1
0 RSC_CHKSAL bit 1 1
0 RSC_TIPCON char 2 1
0 RSC_TIPRES char 2 1
0 RSC_AUTCON varchar 100 1
0 RSC_SWMAIL bit 1 1
0 RSC_NUMCON char 5 1
0 RSC_USUARI varchar 8 1
0 RSC_CHKELI bit 1 1
0 rowguid uniqueidentifier 16 0

TABLA CMM_PARAUD

3 HTC_CODHOT char 3 0
2 PAU_CODLOC char 3 0
2 PAU_CODPAU numeric 9 0
0 PAU_CODTAB varchar 15 1
0 PAU_CODCAM varchar 15 1
0 PAU_INDINS bit 1 1
0 PAU_INDMOD bit 1 1
0 PAU_INDELI bit 1 1
0 PAU_INDRAN bit 1 1
0 PAU_VALMIN decimal 9 1
0 PAU_VALMAX decimal 9 1
0 PAU_USUARI varchar 8 1
0 PAU_CHKELI bit 1 1
0 rowguid uniqueidentifier 16 0

TABLA CMR_REGUSR

3 HTC_CODHOT char 3 0
2 ALM_CODALM char 3 0
2 RUR_NUMREG numeric 9 0
0 RUR_USUARI varchar 8 1
0 RUR_TABAFE char 10 1
0 RUR_CAMTAB varchar 50 1
0 RUR_CLAREG varchar 100 1
0 RUR_FECREG datetime 8 1
0 RUR_OPERAC varchar 20 1
0 RUR_DATANT varchar 50 1
0 DUR_DATACT varchar 50 1
0 RUR_CLAVAL varchar 50 1
0 RUR_CHKELI bit 1 1
0 rowguid uniqueidentifier 16 0

lo que me dice el programador es que este cada vez que se hace un insert,
update o delete de cualquier tabla de su sistema
este trigger deberia dispararse, por lo tanto a creado uno en cada tabla de
su aplicacion, lo que que hace es buscar los
parametros de la auditoria en la tabla "cmm_paraud" de alli saca si la tabla
se audita y si el campo afectado se audita, de
acuerdo a eso graba la informacion en la tabla "cmr_regusr", el estuvo
probando y le funcionaba bien hasta que comenzo a
fallar y no sabe porque, lo que me dice es que cuando borro la tabla
"cmm_paraud" y dejo solo la definicion de auditoria de
la tabla que estuvo probando (81 registros quedaron y tenia 1560 aprox.), si
le funciona, el asunto es que necesita poner los
otros registros qyue borro necesariamente.

gracias por la ayuda.












"Maximiliano Damian Accotto" wrote in
message news:
Hola, sin la estructura del trigger y tablas es casi imposible ayudarte!!
podrias ser tan amable de darnos mas informacion?

gracias


Salu2 enormes

Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
-
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...efault.asp
-
(maxi_accotto[arroba]speedy.com.ar)
MSN:
-

"Gustavo Villaran" escribió en el mensaje
news:
> hola,
>
> estoy tratando de hacer un update a una tabla en la cual modifico un


solo
> campo,
> al terminar el update, este debe disparar un trigger que graba en otra
> tabla, el tipo
> de operacion que se hizo sobre la tabla anterior y el valor de los


campos
> modificados,
> esta sirve para auditoria.
>
> al ejecutar un update sobre la tabla me sale el error siguiente :
>
> Process 67 unlocking unowned resource: TAB: 10:334884510
>
> alguien sabe como solucionar esto?
>
> gracias
>
>


Respuesta Responder a este mensaje
#3 Maximiliano Damian Accotto
13/04/2004 - 01:24 | Informe spam
Hola!! semejante Triggerrr cheee!! ademas de ser super lento lo que hizo el
programador y segun mi opinion nomas deberia de no tratar de ser tan
generico y si es necesario que en las tablas que quiere auditar le arme los
triggers necesarios y no uno tan enorme y con cursores y todo aquello que
hacen re pesado el motor (se que este no es el problema que me decis, pero
te lo debo mencionar)

Bueno ahora mi pregunta es? solo en el Update falla? o en el Insert y Delete
tambien?

Bye


Salu2 enormes

Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
-
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...efault.asp
-
(maxi_accotto[arroba]speedy.com.ar)
MSN:
-

"Gustavo Villaran" escribió en el mensaje
news:
le dije al programador que me pasara el codigo del trigger y aqui esta :

CREATE TRIGGER ut_i_regusr_RSC_RESERV ON RSC_RESERV FOR INSERT, UPDATE,
DELETE
AS
DECLARE @li_id_proceso integer,
@ls_codhot varchar(3),
@ls_codalm varchar(3),
@ls_usuari varchar(8),
@ls_codtab char(15),
@ls_codcam char(15),
@ln_indins integer,
@ln_indmod integer,
@ln_indeli integer,
@ln_indran integer,
@ln_valmin integer,
@ln_valmax integer,
@ls_operac char(9),
@li_indins integer,
@li_indmod integer,
@li_indeli integer,
@ls_deslla varchar(100),
@ls_cadena varchar(100),
@ls_val_del varchar(100),
@ls_val_ins varchar(100),
@ls_val_clave varchar(100),
@ls_cadena_clave varchar(100),
@ldt_fecha datetime,
@li_numreg integer,
@ls_sentencia_del varchar(100),
@ls_sentencia_ins varchar(100),
@ls_sentencia_ins_null varchar(250),
@ls_sentencia varchar(500),
@li_valor integer,
@ls_apos varchar(1),
@li_open_cursor integer

BEGIN
select @li_open_cursor = 0
select @ls_apos = char(39)
select @ldt_fecha = getdate()

exec usp_u_id_proceso @li_id_proceso output

obtener los valores del hotel y de la localidad
select @ls_codhot = ist_codhot,
@ls_codalm = ist_codalm,
@ls_usuari = ist_usuari
from CMT_INGSIS WITH (NOLOCK)
where ist_iningr = @li_id_proceso

select * into #1del from deleted
select * into #1ins from inserted

select @ls_deslla = ttm_deslla
from cmm_tabtab
where ttm_codtab = 'RSC_RESERV'

select @ls_cadena_clave = 'select ' + @ls_deslla + ' from #1del'

If(select count(*) from deleted ) = 0 and (select count(*) from


inserted)
> 0
begin
select @ls_operac = 'INSERTA'
select @ls_cadena_clave = 'select ' + @ls_deslla + ' from #1ins'
DECLARE C_PARAUD_INS_RSC_RESERV CURSOR FOR
select pau_codtab, pau_codcam, pau_indins, pau_indmod,
pau_indeli, pau_indran, pau_valmin, pau_valmax
from cmm_paraud
where htc_codhot = @ls_codhot
and pau_codloc = @ls_codalm
and pau_codtab = 'RSC_RESERV'
and pau_chkeli = 0
and pau_indins = 1
set @li_open_cursor = 1
end

If(select count(*) from deleted ) > 0 and (select count(*) from


inserted)
> 0
begin
select @ls_operac = 'ACTUALIZA'
DECLARE C_PARAUD_ACT_RSC_RESERV CURSOR FOR
select pau_codtab, pau_codcam, pau_indins, pau_indmod,
pau_indeli, pau_indran, pau_valmin, pau_valmax
from cmm_paraud
where htc_codhot = @ls_codhot
and pau_codloc = @ls_codalm
and pau_codtab = 'RSC_RESERV'
and pau_chkeli = 0
and pau_indmod = 1
set @li_open_cursor = 1
end

If(select count(*) from deleted ) > 0 and (select count(*) from


inserted)
= 0
begin
select @ls_operac = 'ELIMINA'
DECLARE C_PARAUD_ELI_RSC_RESERV CURSOR FOR
select pau_codtab, pau_codcam, pau_indins, pau_indmod,
pau_indeli, pau_indran, pau_valmin, pau_valmax
from cmm_paraud
where htc_codhot = @ls_codhot
and pau_codloc = @ls_codalm
and pau_codtab = 'RSC_RESERV'
and pau_chkeli = 0
and pau_indeli = 1
set @li_open_cursor = 1
end

if @li_open_cursor = 0 return

If @ls_operac = 'INSERTA'
begin
OPEN C_PARAUD_INS_RSC_RESERV;
FETCH NEXT FROM C_PARAUD_INS_RSC_RESERV INTO @ls_codtab, @ls_codcam,
@ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin, @ln_valmax

WHILE @@FETCH_STATUS = 0
BEGIN


campos
auditables
select @ls_sentencia_ins = 'SELECT '+ @ls_codcam +' FROM #1ins'

select @li_numreg = count(*) from CMR_REGUSR
if @li_numreg = 0
begin
select @li_numreg = 1
end
else
begin
select @li_numreg = max(isnull(RUR_NUMREG,0)) from


CMR_REGUSR
select @li_numreg = @li_numreg + 1
end

begin tran
INSERT INTO CMR_REGUSR (HTC_CODHOT, ALM_CODALM, RUR_NUMREG,
RUR_USUARI, RUR_TABAFE, RUR_CAMTAB,
RUR_CLAREG,
RUR_FECREG, RUR_OPERAC, DUR_DATACT,
RUR_CHKELI,
RUR_CLAVAL)
exec ('SELECT ' + @ls_apos + @ls_codhot + @ls_apos + ', ' +
@ls_apos + @ls_codalm + @ls_apos + ', ' + @li_numreg + ', ' +
@ls_apos + @ls_usuari + @ls_apos + ', ' + @ls_apos +
@ls_codtab + @ls_apos + ', ' + @ls_apos + @ls_codcam + @ls_apos + ', ' +
@ls_apos + @ls_deslla + @ls_apos + ', ' +
@ls_apos + @ldt_fecha + @ls_apos + ', ' + @ls_apos +
@ls_operac + @ls_apos + ', ' + '(' + @ls_sentencia_ins + ')' + ', ' + '0'


+
', ' +
'(' + @ls_cadena_clave + ')')

delete from CMR_REGUSR
where DUR_DATACT IS NULL

if @ln_indran = 1
begin
delete from CMR_REGUSR
where HTC_CODHOT = @ls_codhot
and ALM_CODALM = @ls_codalm
and RUR_TABAFE = @ls_codtab
and RUR_CAMTAB = @ls_codcam
and convert(decimal(9,3),DUR_DATACT) >= @ln_valmin
and convert(decimal(9,3),DUR_DATACT) <= @ln_valmax
end
commit tran

FETCH NEXT FROM C_PARAUD_INS_RSC_RESERV INTO @ls_codtab,
@ls_codcam, @ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin,
@ln_valmax
end
CLOSE C_PARAUD_INS_RSC_RESERV;
DEALLOCATE C_PARAUD_INS_RSC_RESERV;
end

if @ls_operac = 'ACTUALIZA'
BEGIN
OPEN C_PARAUD_ACT_RSC_RESERV;
FETCH NEXT FROM C_PARAUD_ACT_RSC_RESERV INTO @ls_codtab, @ls_codcam,
@ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin, @ln_valmax

WHILE @@FETCH_STATUS = 0
BEGIN


campos
auditables
select @ls_sentencia_del = 'SELECT '+ @ls_codcam +' FROM #1del'
select @ls_sentencia_ins = 'SELECT '+ @ls_codcam +' FROM #1ins'

select @li_numreg = count(*) from CMR_REGUSR
if @li_numreg = 0
begin
select @li_numreg = 1
end
else
begin
select @li_numreg = max(isnull(RUR_NUMREG,0)) from


CMR_REGUSR
select @li_numreg = @li_numreg + 1
end

begin tran
INSERT INTO CMR_REGUSR (HTC_CODHOT, ALM_CODALM, RUR_NUMREG,
RUR_DATANT,
RUR_USUARI, RUR_TABAFE, RUR_CAMTAB,
RUR_CLAREG,
RUR_FECREG, RUR_OPERAC, DUR_DATACT,
RUR_CHKELI,
RUR_CLAVAL)
exec ('SELECT ' + @ls_apos + @ls_codhot + @ls_apos + ', ' +
@ls_apos + @ls_codalm + @ls_apos + ', ' + @li_numreg + ', ' + '(' +
@ls_sentencia_del + ')' + ', ' +
@ls_apos + @ls_usuari + @ls_apos + ', ' + @ls_apos +
@ls_codtab + @ls_apos + ', ' + @ls_apos + @ls_codcam + @ls_apos + ', ' +
@ls_apos + @ls_deslla + @ls_apos + ', ' +
@ls_apos + @ldt_fecha + @ls_apos + ', ' + @ls_apos +
@ls_operac + @ls_apos + ', ' + '(' + @ls_sentencia_ins + ')' + ', ' + '0'


+
', ' +
'(' + @ls_cadena_clave + ')')

delete from CMR_REGUSR
where DUR_DATACT = RUR_DATANT
or ( dur_DATACT is null
and RUR_DATANT is null )

if @ln_indran = 1
begin
delete from CMR_REGUSR
where HTC_CODHOT = @ls_codhot
and ALM_CODALM = @ls_codalm
and RUR_TABAFE = @ls_codtab
and RUR_CAMTAB = @ls_codcam
and convert(decimal(9,3),DUR_DATACT) >= @ln_valmin
and convert(decimal(9,3),DUR_DATACT) <= @ln_valmax

end
commit tran

FETCH NEXT FROM C_PARAUD_ACT_RSC_RESERV INTO @ls_codtab,
@ls_codcam, @ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin,
@ln_valmax
END
CLOSE C_PARAUD_ACT_RSC_RESERV;
DEALLOCATE C_PARAUD_ACT_RSC_RESERV;
END

If @ls_operac = 'ELIMINA'
begin
OPEN C_PARAUD_ELI_RSC_RESERV;
FETCH NEXT FROM C_PARAUD_ELI_RSC_RESERV INTO @ls_codtab, @ls_codcam,
@ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin, @ln_valmax

WHILE @@FETCH_STATUS = 0

BEGIN


campos
auditables
select @ls_sentencia_del = 'SELECT '+ @ls_codcam +' FROM #1del'

select @li_numreg = count(*) from CMR_REGUSR
if @li_numreg = 0
begin
select @li_numreg = 1
end
else
begin
select @li_numreg = max(isnull(RUR_NUMREG,0)) from


CMR_REGUSR
select @li_numreg = @li_numreg + 1
end

begin tran
INSERT INTO CMR_REGUSR (HTC_CODHOT, ALM_CODALM, RUR_NUMREG,
RUR_DATANT,
RUR_USUARI, RUR_TABAFE, RUR_CAMTAB,
RUR_CLAREG,
RUR_FECREG, RUR_OPERAC, RUR_CHKELI,
RUR_CLAVAL)
exec ('SELECT ' + @ls_apos + @ls_codhot + @ls_apos + ', ' +
@ls_apos + @ls_codalm + @ls_apos + ', ' + @li_numreg + ', ' + '(' +
@ls_sentencia_del + ')' + ', ' +
@ls_apos + @ls_usuari + @ls_apos + ', ' + @ls_apos +
@ls_codtab + @ls_apos + ', ' + @ls_apos + @ls_codcam + @ls_apos + ', ' +
@ls_apos + @ls_deslla + @ls_apos + ', ' +
@ls_apos + @ldt_fecha + @ls_apos + ', ' + @ls_apos +
@ls_operac + @ls_apos + ', ' + '0' + ', ' +
'(' + @ls_cadena_clave + ')')
commit tran

FETCH NEXT FROM C_PARAUD_ELI_RSC_RESERV INTO @ls_codtab,
@ls_codcam, @ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin,
@ln_valmax
END
CLOSE C_PARAUD_ELI_RSC_RESERV;
DEALLOCATE C_PARAUD_ELI_RSC_RESERV;
end
END

TABLA QUE ESTUVO PROBANDO (RSC_RESERV)

3 HTC_CODHOT char 3 0
2 RSC_CODLOC char 3 0
2 RSC_NUMRES char 10 0
0 CLM_CODCLI char 10 1
0 COM_CODCOU char 7 1
0 RSC_TIPGRU varchar 2 1
0 RSC_NOMGRU varchar 100 1
0 RSC_TIPMER varchar 5 1
0 RSC_OPEREF varchar 10 1
0 RSC_EMPREF varchar 100 1
0 RSC_RESAGE varchar 10 1
0 RSC_FECRES datetime 8 1
0 RSC_FECING datetime 8 1
0 RSC_FECSAL datetime 8 1
0 RSC_NUMNOC int 4 1
0 RSC_DIACON int 4 1
0 RSC_DIACRE int 4 1
0 RSC_CANPAX smallint 2 1
0 RSC_VIALLE varchar 1 1
0 RSC_HORLLE datetime 8 1
0 RSC_EMPLLE varchar 4 1
0 RSC_VUELLE int 4 1
0 RSC_VIASAL varchar 1 1
0 RSC_HORSAL datetime 8 1
0 RSC_EMPSAL varchar 4 1
0 RSC_VUESAL int 4 1
0 RSC_FECREC datetime 8 1
0 RSC_IMPIGV bit 1 1
0 RSC_PORIGV decimal 9 1
0 RSC_CARSER bit 1 1
0 RSC_PORSER decimal 9 1
0 RSC_ESTRES char 2 1
0 RSC_ESTMUL char 2 1
0 RSC_FECEMI datetime 8 1
0 RSC_FECCON datetime 8 1
0 RSC_FECANU datetime 8 1
0 RSC_FECCAN datetime 8 1
0 RSC_TIPMON varchar 1 1
0 RSC_TIPCOM decimal 9 1
0 RSC_TIPVEN decimal 9 1
0 RSC_PORDES decimal 9 1
0 RSC_TOTSOL decimal 9 1
0 RSC_TOTDOL decimal 9 1
0 RSC_DESFAC char 3 1
0 RSC_MODDIV bit 1 1
0 RSC_TIPFAC char 2 1
0 RSC_EMPFAC char 10 1
0 RSC_FORRES char 2 1
0 RSC_NOMTOU char 5 1
0 RSC_CHKING bit 1 1
0 RSC_CHKSAL bit 1 1
0 RSC_TIPCON char 2 1
0 RSC_TIPRES char 2 1
0 RSC_AUTCON varchar 100 1
0 RSC_SWMAIL bit 1 1
0 RSC_NUMCON char 5 1
0 RSC_USUARI varchar 8 1
0 RSC_CHKELI bit 1 1
0 rowguid uniqueidentifier 16 0

TABLA CMM_PARAUD

3 HTC_CODHOT char 3 0
2 PAU_CODLOC char 3 0
2 PAU_CODPAU numeric 9 0
0 PAU_CODTAB varchar 15 1
0 PAU_CODCAM varchar 15 1
0 PAU_INDINS bit 1 1
0 PAU_INDMOD bit 1 1
0 PAU_INDELI bit 1 1
0 PAU_INDRAN bit 1 1
0 PAU_VALMIN decimal 9 1
0 PAU_VALMAX decimal 9 1
0 PAU_USUARI varchar 8 1
0 PAU_CHKELI bit 1 1
0 rowguid uniqueidentifier 16 0

TABLA CMR_REGUSR

3 HTC_CODHOT char 3 0
2 ALM_CODALM char 3 0
2 RUR_NUMREG numeric 9 0
0 RUR_USUARI varchar 8 1
0 RUR_TABAFE char 10 1
0 RUR_CAMTAB varchar 50 1
0 RUR_CLAREG varchar 100 1
0 RUR_FECREG datetime 8 1
0 RUR_OPERAC varchar 20 1
0 RUR_DATANT varchar 50 1
0 DUR_DATACT varchar 50 1
0 RUR_CLAVAL varchar 50 1
0 RUR_CHKELI bit 1 1
0 rowguid uniqueidentifier 16 0

lo que me dice el programador es que este cada vez que se hace un insert,
update o delete de cualquier tabla de su sistema
este trigger deberia dispararse, por lo tanto a creado uno en cada tabla


de
su aplicacion, lo que que hace es buscar los
parametros de la auditoria en la tabla "cmm_paraud" de alli saca si la


tabla
se audita y si el campo afectado se audita, de
acuerdo a eso graba la informacion en la tabla "cmr_regusr", el estuvo
probando y le funcionaba bien hasta que comenzo a
fallar y no sabe porque, lo que me dice es que cuando borro la tabla
"cmm_paraud" y dejo solo la definicion de auditoria de
la tabla que estuvo probando (81 registros quedaron y tenia 1560 aprox.),


si
le funciona, el asunto es que necesita poner los
otros registros qyue borro necesariamente.

gracias por la ayuda.












"Maximiliano Damian Accotto" wrote in
message news:
> Hola, sin la estructura del trigger y tablas es casi imposible


ayudarte!!
> podrias ser tan amable de darnos mas informacion?
>
> gracias
>
>
> Salu2 enormes
>
> Maximiliano Damian Accotto
>
> Fundicion San Cayetano S.A.
> Gerente de IT
> Buenos Aires - Argentina
> -
> Desarrollador 3 estrellas
>


http://www.microsoft.com/spanish/ms...efault.asp
> -
> (maxi_accotto[arroba]speedy.com.ar)
> MSN:
> -
>
> "Gustavo Villaran" escribió en el mensaje
> news:
> > hola,
> >
> > estoy tratando de hacer un update a una tabla en la cual modifico un
solo
> > campo,
> > al terminar el update, este debe disparar un trigger que graba en otra
> > tabla, el tipo
> > de operacion que se hizo sobre la tabla anterior y el valor de los
campos
> > modificados,
> > esta sirve para auditoria.
> >
> > al ejecutar un update sobre la tabla me sale el error siguiente :
> >
> > Process 67 unlocking unowned resource: TAB: 10:334884510
> >
> > alguien sabe como solucionar esto?
> >
> > gracias
> >
> >
>
>


Respuesta Responder a este mensaje
#4 Gustavo Villaran
13/04/2004 - 01:36 | Informe spam
eso mismo le dije, cursores en un trigger es un desastrepero bueno ya
yo le dije lo que deberia hacer, ahora vamos a ver si me hace caso.

el problema le da en todos los casos insert, update etc...

gracias


"Maximiliano Damian Accotto" wrote in
message news:
Hola!! semejante Triggerrr cheee!! ademas de ser super lento lo que hizo


el
programador y segun mi opinion nomas deberia de no tratar de ser tan
generico y si es necesario que en las tablas que quiere auditar le arme


los
triggers necesarios y no uno tan enorme y con cursores y todo aquello que
hacen re pesado el motor (se que este no es el problema que me decis, pero
te lo debo mencionar)

Bueno ahora mi pregunta es? solo en el Update falla? o en el Insert y


Delete
tambien?

Bye


Salu2 enormes

Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
-
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...efault.asp
-
(maxi_accotto[arroba]speedy.com.ar)
MSN:
-

"Gustavo Villaran" escribió en el mensaje
news:
> le dije al programador que me pasara el codigo del trigger y aqui esta :
>
> CREATE TRIGGER ut_i_regusr_RSC_RESERV ON RSC_RESERV FOR INSERT, UPDATE,
> DELETE
> AS
> DECLARE @li_id_proceso integer,
> @ls_codhot varchar(3),
> @ls_codalm varchar(3),
> @ls_usuari varchar(8),
> @ls_codtab char(15),
> @ls_codcam char(15),
> @ln_indins integer,
> @ln_indmod integer,
> @ln_indeli integer,
> @ln_indran integer,
> @ln_valmin integer,
> @ln_valmax integer,
> @ls_operac char(9),
> @li_indins integer,
> @li_indmod integer,
> @li_indeli integer,
> @ls_deslla varchar(100),
> @ls_cadena varchar(100),
> @ls_val_del varchar(100),
> @ls_val_ins varchar(100),
> @ls_val_clave varchar(100),
> @ls_cadena_clave varchar(100),
> @ldt_fecha datetime,
> @li_numreg integer,
> @ls_sentencia_del varchar(100),
> @ls_sentencia_ins varchar(100),
> @ls_sentencia_ins_null varchar(250),
> @ls_sentencia varchar(500),
> @li_valor integer,
> @ls_apos varchar(1),
> @li_open_cursor integer
>
> BEGIN
> select @li_open_cursor = 0
> select @ls_apos = char(39)
> select @ldt_fecha = getdate()
>
> exec usp_u_id_proceso @li_id_proceso output
>
> obtener los valores del hotel y de la localidad
> select @ls_codhot = ist_codhot,
> @ls_codalm = ist_codalm,
> @ls_usuari = ist_usuari
> from CMT_INGSIS WITH (NOLOCK)
> where ist_iningr = @li_id_proceso
>
> select * into #1del from deleted
> select * into #1ins from inserted
>
> select @ls_deslla = ttm_deslla
> from cmm_tabtab
> where ttm_codtab = 'RSC_RESERV'
>
> select @ls_cadena_clave = 'select ' + @ls_deslla + ' from #1del'
>
> If(select count(*) from deleted ) = 0 and (select count(*) from
inserted)
> > 0
> begin
> select @ls_operac = 'INSERTA'
> select @ls_cadena_clave = 'select ' + @ls_deslla + ' from #1ins'
> DECLARE C_PARAUD_INS_RSC_RESERV CURSOR FOR
> select pau_codtab, pau_codcam, pau_indins, pau_indmod,
> pau_indeli, pau_indran, pau_valmin, pau_valmax
> from cmm_paraud
> where htc_codhot = @ls_codhot
> and pau_codloc = @ls_codalm
> and pau_codtab = 'RSC_RESERV'
> and pau_chkeli = 0
> and pau_indins = 1
> set @li_open_cursor = 1
> end
>
> If(select count(*) from deleted ) > 0 and (select count(*) from
inserted)
> > 0
> begin
> select @ls_operac = 'ACTUALIZA'
> DECLARE C_PARAUD_ACT_RSC_RESERV CURSOR FOR
> select pau_codtab, pau_codcam, pau_indins, pau_indmod,
> pau_indeli, pau_indran, pau_valmin, pau_valmax
> from cmm_paraud
> where htc_codhot = @ls_codhot
> and pau_codloc = @ls_codalm
> and pau_codtab = 'RSC_RESERV'
> and pau_chkeli = 0
> and pau_indmod = 1
> set @li_open_cursor = 1
> end
>
> If(select count(*) from deleted ) > 0 and (select count(*) from
inserted)
> = 0
> begin
> select @ls_operac = 'ELIMINA'
> DECLARE C_PARAUD_ELI_RSC_RESERV CURSOR FOR
> select pau_codtab, pau_codcam, pau_indins, pau_indmod,
> pau_indeli, pau_indran, pau_valmin, pau_valmax
> from cmm_paraud
> where htc_codhot = @ls_codhot
> and pau_codloc = @ls_codalm
> and pau_codtab = 'RSC_RESERV'
> and pau_chkeli = 0
> and pau_indeli = 1
> set @li_open_cursor = 1
> end
>
> if @li_open_cursor = 0 return
>
> If @ls_operac = 'INSERTA'
> begin
> OPEN C_PARAUD_INS_RSC_RESERV;
> FETCH NEXT FROM C_PARAUD_INS_RSC_RESERV INTO @ls_codtab,


@ls_codcam,
> @ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin, @ln_valmax
>
> WHILE @@FETCH_STATUS = 0
> BEGIN
campos
> auditables
> select @ls_sentencia_ins = 'SELECT '+ @ls_codcam +' FROM


#1ins'
>
> select @li_numreg = count(*) from CMR_REGUSR
> if @li_numreg = 0
> begin
> select @li_numreg = 1
> end
> else
> begin
> select @li_numreg = max(isnull(RUR_NUMREG,0)) from
CMR_REGUSR
> select @li_numreg = @li_numreg + 1
> end
>
> begin tran
> INSERT INTO CMR_REGUSR (HTC_CODHOT, ALM_CODALM,


RUR_NUMREG,
> RUR_USUARI, RUR_TABAFE,


RUR_CAMTAB,
> RUR_CLAREG,
> RUR_FECREG, RUR_OPERAC,


DUR_DATACT,
> RUR_CHKELI,
> RUR_CLAVAL)
> exec ('SELECT ' + @ls_apos + @ls_codhot + @ls_apos + ', '


+
> @ls_apos + @ls_codalm + @ls_apos + ', ' + @li_numreg + ', ' +
> @ls_apos + @ls_usuari + @ls_apos + ', ' + @ls_apos +
> @ls_codtab + @ls_apos + ', ' + @ls_apos + @ls_codcam + @ls_apos + ', ' +
> @ls_apos + @ls_deslla + @ls_apos + ', ' +
> @ls_apos + @ldt_fecha + @ls_apos + ', ' + @ls_apos +
> @ls_operac + @ls_apos + ', ' + '(' + @ls_sentencia_ins + ')' + ', ' +


'0'
+
> ', ' +
> '(' + @ls_cadena_clave + ')')
>
> delete from CMR_REGUSR
> where DUR_DATACT IS NULL
>
> if @ln_indran = 1
> begin
> delete from CMR_REGUSR
> where HTC_CODHOT = @ls_codhot
> and ALM_CODALM = @ls_codalm
> and RUR_TABAFE = @ls_codtab
> and RUR_CAMTAB = @ls_codcam
> and convert(decimal(9,3),DUR_DATACT) >= @ln_valmin
> and convert(decimal(9,3),DUR_DATACT) <= @ln_valmax
> end
> commit tran
>
> FETCH NEXT FROM C_PARAUD_INS_RSC_RESERV INTO @ls_codtab,
> @ls_codcam, @ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin,
> @ln_valmax
> end
> CLOSE C_PARAUD_INS_RSC_RESERV;
> DEALLOCATE C_PARAUD_INS_RSC_RESERV;
> end
>
> if @ls_operac = 'ACTUALIZA'
> BEGIN
> OPEN C_PARAUD_ACT_RSC_RESERV;
> FETCH NEXT FROM C_PARAUD_ACT_RSC_RESERV INTO @ls_codtab,


@ls_codcam,
> @ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin, @ln_valmax
>
> WHILE @@FETCH_STATUS = 0
> BEGIN
campos
> auditables
> select @ls_sentencia_del = 'SELECT '+ @ls_codcam +' FROM


#1del'
> select @ls_sentencia_ins = 'SELECT '+ @ls_codcam +' FROM


#1ins'
>
> select @li_numreg = count(*) from CMR_REGUSR
> if @li_numreg = 0
> begin
> select @li_numreg = 1
> end
> else
> begin
> select @li_numreg = max(isnull(RUR_NUMREG,0)) from
CMR_REGUSR
> select @li_numreg = @li_numreg + 1
> end
>
> begin tran
> INSERT INTO CMR_REGUSR (HTC_CODHOT, ALM_CODALM,


RUR_NUMREG,
> RUR_DATANT,
> RUR_USUARI, RUR_TABAFE,


RUR_CAMTAB,
> RUR_CLAREG,
> RUR_FECREG, RUR_OPERAC,


DUR_DATACT,
> RUR_CHKELI,
> RUR_CLAVAL)
> exec ('SELECT ' + @ls_apos + @ls_codhot + @ls_apos + ', '


+
> @ls_apos + @ls_codalm + @ls_apos + ', ' + @li_numreg + ', ' + '(' +
> @ls_sentencia_del + ')' + ', ' +
> @ls_apos + @ls_usuari + @ls_apos + ', ' + @ls_apos +
> @ls_codtab + @ls_apos + ', ' + @ls_apos + @ls_codcam + @ls_apos + ', ' +
> @ls_apos + @ls_deslla + @ls_apos + ', ' +
> @ls_apos + @ldt_fecha + @ls_apos + ', ' + @ls_apos +
> @ls_operac + @ls_apos + ', ' + '(' + @ls_sentencia_ins + ')' + ', ' +


'0'
+
> ', ' +
> '(' + @ls_cadena_clave + ')')
>
> delete from CMR_REGUSR
> where DUR_DATACT = RUR_DATANT
> or ( dur_DATACT is null
> and RUR_DATANT is null )
>
> if @ln_indran = 1
> begin
> delete from CMR_REGUSR
> where HTC_CODHOT = @ls_codhot
> and ALM_CODALM = @ls_codalm
> and RUR_TABAFE = @ls_codtab
> and RUR_CAMTAB = @ls_codcam
> and convert(decimal(9,3),DUR_DATACT) >= @ln_valmin
> and convert(decimal(9,3),DUR_DATACT) <= @ln_valmax
>
> end
> commit tran
>
> FETCH NEXT FROM C_PARAUD_ACT_RSC_RESERV INTO @ls_codtab,
> @ls_codcam, @ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin,
> @ln_valmax
> END
> CLOSE C_PARAUD_ACT_RSC_RESERV;
> DEALLOCATE C_PARAUD_ACT_RSC_RESERV;
> END
>
> If @ls_operac = 'ELIMINA'
> begin
> OPEN C_PARAUD_ELI_RSC_RESERV;
> FETCH NEXT FROM C_PARAUD_ELI_RSC_RESERV INTO @ls_codtab,


@ls_codcam,
> @ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin, @ln_valmax
>
> WHILE @@FETCH_STATUS = 0
>
> BEGIN
campos
> auditables
> select @ls_sentencia_del = 'SELECT '+ @ls_codcam +' FROM


#1del'
>
> select @li_numreg = count(*) from CMR_REGUSR
> if @li_numreg = 0
> begin
> select @li_numreg = 1
> end
> else
> begin
> select @li_numreg = max(isnull(RUR_NUMREG,0)) from
CMR_REGUSR
> select @li_numreg = @li_numreg + 1
> end
>
> begin tran
> INSERT INTO CMR_REGUSR (HTC_CODHOT, ALM_CODALM,


RUR_NUMREG,
> RUR_DATANT,
> RUR_USUARI, RUR_TABAFE,


RUR_CAMTAB,
> RUR_CLAREG,
> RUR_FECREG, RUR_OPERAC,


RUR_CHKELI,
> RUR_CLAVAL)
> exec ('SELECT ' + @ls_apos + @ls_codhot + @ls_apos + ', '


+
> @ls_apos + @ls_codalm + @ls_apos + ', ' + @li_numreg + ', ' + '(' +
> @ls_sentencia_del + ')' + ', ' +
> @ls_apos + @ls_usuari + @ls_apos + ', ' + @ls_apos +
> @ls_codtab + @ls_apos + ', ' + @ls_apos + @ls_codcam + @ls_apos + ', ' +
> @ls_apos + @ls_deslla + @ls_apos + ', ' +
> @ls_apos + @ldt_fecha + @ls_apos + ', ' + @ls_apos +
> @ls_operac + @ls_apos + ', ' + '0' + ', ' +
> '(' + @ls_cadena_clave + ')')
> commit tran
>
> FETCH NEXT FROM C_PARAUD_ELI_RSC_RESERV INTO @ls_codtab,
> @ls_codcam, @ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin,
> @ln_valmax
> END
> CLOSE C_PARAUD_ELI_RSC_RESERV;
> DEALLOCATE C_PARAUD_ELI_RSC_RESERV;
> end
> END
>
> TABLA QUE ESTUVO PROBANDO (RSC_RESERV)
>
> 3 HTC_CODHOT char 3 0
> 2 RSC_CODLOC char 3 0
> 2 RSC_NUMRES char 10 0
> 0 CLM_CODCLI char 10 1
> 0 COM_CODCOU char 7 1
> 0 RSC_TIPGRU varchar 2 1
> 0 RSC_NOMGRU varchar 100 1
> 0 RSC_TIPMER varchar 5 1
> 0 RSC_OPEREF varchar 10 1
> 0 RSC_EMPREF varchar 100 1
> 0 RSC_RESAGE varchar 10 1
> 0 RSC_FECRES datetime 8 1
> 0 RSC_FECING datetime 8 1
> 0 RSC_FECSAL datetime 8 1
> 0 RSC_NUMNOC int 4 1
> 0 RSC_DIACON int 4 1
> 0 RSC_DIACRE int 4 1
> 0 RSC_CANPAX smallint 2 1
> 0 RSC_VIALLE varchar 1 1
> 0 RSC_HORLLE datetime 8 1
> 0 RSC_EMPLLE varchar 4 1
> 0 RSC_VUELLE int 4 1
> 0 RSC_VIASAL varchar 1 1
> 0 RSC_HORSAL datetime 8 1
> 0 RSC_EMPSAL varchar 4 1
> 0 RSC_VUESAL int 4 1
> 0 RSC_FECREC datetime 8 1
> 0 RSC_IMPIGV bit 1 1
> 0 RSC_PORIGV decimal 9 1
> 0 RSC_CARSER bit 1 1
> 0 RSC_PORSER decimal 9 1
> 0 RSC_ESTRES char 2 1
> 0 RSC_ESTMUL char 2 1
> 0 RSC_FECEMI datetime 8 1
> 0 RSC_FECCON datetime 8 1
> 0 RSC_FECANU datetime 8 1
> 0 RSC_FECCAN datetime 8 1
> 0 RSC_TIPMON varchar 1 1
> 0 RSC_TIPCOM decimal 9 1
> 0 RSC_TIPVEN decimal 9 1
> 0 RSC_PORDES decimal 9 1
> 0 RSC_TOTSOL decimal 9 1
> 0 RSC_TOTDOL decimal 9 1
> 0 RSC_DESFAC char 3 1
> 0 RSC_MODDIV bit 1 1
> 0 RSC_TIPFAC char 2 1
> 0 RSC_EMPFAC char 10 1
> 0 RSC_FORRES char 2 1
> 0 RSC_NOMTOU char 5 1
> 0 RSC_CHKING bit 1 1
> 0 RSC_CHKSAL bit 1 1
> 0 RSC_TIPCON char 2 1
> 0 RSC_TIPRES char 2 1
> 0 RSC_AUTCON varchar 100 1
> 0 RSC_SWMAIL bit 1 1
> 0 RSC_NUMCON char 5 1
> 0 RSC_USUARI varchar 8 1
> 0 RSC_CHKELI bit 1 1
> 0 rowguid uniqueidentifier 16 0
>
> TABLA CMM_PARAUD
>
> 3 HTC_CODHOT char 3 0
> 2 PAU_CODLOC char 3 0
> 2 PAU_CODPAU numeric 9 0
> 0 PAU_CODTAB varchar 15 1
> 0 PAU_CODCAM varchar 15 1
> 0 PAU_INDINS bit 1 1
> 0 PAU_INDMOD bit 1 1
> 0 PAU_INDELI bit 1 1
> 0 PAU_INDRAN bit 1 1
> 0 PAU_VALMIN decimal 9 1
> 0 PAU_VALMAX decimal 9 1
> 0 PAU_USUARI varchar 8 1
> 0 PAU_CHKELI bit 1 1
> 0 rowguid uniqueidentifier 16 0
>
> TABLA CMR_REGUSR
>
> 3 HTC_CODHOT char 3 0
> 2 ALM_CODALM char 3 0
> 2 RUR_NUMREG numeric 9 0
> 0 RUR_USUARI varchar 8 1
> 0 RUR_TABAFE char 10 1
> 0 RUR_CAMTAB varchar 50 1
> 0 RUR_CLAREG varchar 100 1
> 0 RUR_FECREG datetime 8 1
> 0 RUR_OPERAC varchar 20 1
> 0 RUR_DATANT varchar 50 1
> 0 DUR_DATACT varchar 50 1
> 0 RUR_CLAVAL varchar 50 1
> 0 RUR_CHKELI bit 1 1
> 0 rowguid uniqueidentifier 16 0
>
> lo que me dice el programador es que este cada vez que se hace un


insert,
> update o delete de cualquier tabla de su sistema
> este trigger deberia dispararse, por lo tanto a creado uno en cada tabla
de
> su aplicacion, lo que que hace es buscar los
> parametros de la auditoria en la tabla "cmm_paraud" de alli saca si la
tabla
> se audita y si el campo afectado se audita, de
> acuerdo a eso graba la informacion en la tabla "cmr_regusr", el estuvo
> probando y le funcionaba bien hasta que comenzo a
> fallar y no sabe porque, lo que me dice es que cuando borro la tabla
> "cmm_paraud" y dejo solo la definicion de auditoria de
> la tabla que estuvo probando (81 registros quedaron y tenia 1560


aprox.),
si
> le funciona, el asunto es que necesita poner los
> otros registros qyue borro necesariamente.
>
> gracias por la ayuda.
>
>
>
>
>
>
>
>
>
>
>
>
> "Maximiliano Damian Accotto" wrote


in
> message news:
> > Hola, sin la estructura del trigger y tablas es casi imposible
ayudarte!!
> > podrias ser tan amable de darnos mas informacion?
> >
> > gracias
> >
> >
> > Salu2 enormes
> >
> > Maximiliano Damian Accotto
> >
> > Fundicion San Cayetano S.A.
> > Gerente de IT
> > Buenos Aires - Argentina
> > -
> > Desarrollador 3 estrellas
> >
http://www.microsoft.com/spanish/ms...efault.asp
> > -
> > (maxi_accotto[arroba]speedy.com.ar)
> > MSN:
> > -
> >
> > "Gustavo Villaran" escribió en el mensaje
> > news:
> > > hola,
> > >
> > > estoy tratando de hacer un update a una tabla en la cual modifico un
> solo
> > > campo,
> > > al terminar el update, este debe disparar un trigger que graba en


otra
> > > tabla, el tipo
> > > de operacion que se hizo sobre la tabla anterior y el valor de los
> campos
> > > modificados,
> > > esta sirve para auditoria.
> > >
> > > al ejecutar un update sobre la tabla me sale el error siguiente :
> > >
> > > Process 67 unlocking unowned resource: TAB: 10:334884510
> > >
> > > alguien sabe como solucionar esto?
> > >
> > > gracias
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#5 Maximiliano Damian Accotto
13/04/2004 - 01:46 | Informe spam
hola, decile que saque el nolock!! y que rearme ese Trigger porque es muy
malo en rendimiento y mantenimiento.

Bye


Salu2 enormes

Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
-
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...efault.asp
-
(maxi_accotto[arroba]speedy.com.ar)
MSN:
-

"Gustavo Villaran" escribió en el mensaje
news:
eso mismo le dije, cursores en un trigger es un desastrepero bueno ya
yo le dije lo que deberia hacer, ahora vamos a ver si me hace caso.

el problema le da en todos los casos insert, update etc...

gracias


"Maximiliano Damian Accotto" wrote in
message news:
> Hola!! semejante Triggerrr cheee!! ademas de ser super lento lo que hizo
el
> programador y segun mi opinion nomas deberia de no tratar de ser tan
> generico y si es necesario que en las tablas que quiere auditar le arme
los
> triggers necesarios y no uno tan enorme y con cursores y todo aquello


que
> hacen re pesado el motor (se que este no es el problema que me decis,


pero
> te lo debo mencionar)
>
> Bueno ahora mi pregunta es? solo en el Update falla? o en el Insert y
Delete
> tambien?
>
> Bye
>
>
> Salu2 enormes
>
> Maximiliano Damian Accotto
>
> Fundicion San Cayetano S.A.
> Gerente de IT
> Buenos Aires - Argentina
> -
> Desarrollador 3 estrellas
>


http://www.microsoft.com/spanish/ms...efault.asp
> -
> (maxi_accotto[arroba]speedy.com.ar)
> MSN:
> -
>
> "Gustavo Villaran" escribió en el mensaje
> news:
> > le dije al programador que me pasara el codigo del trigger y aqui esta


:
> >
> > CREATE TRIGGER ut_i_regusr_RSC_RESERV ON RSC_RESERV FOR INSERT,


UPDATE,
> > DELETE
> > AS
> > DECLARE @li_id_proceso integer,
> > @ls_codhot varchar(3),
> > @ls_codalm varchar(3),
> > @ls_usuari varchar(8),
> > @ls_codtab char(15),
> > @ls_codcam char(15),
> > @ln_indins integer,
> > @ln_indmod integer,
> > @ln_indeli integer,
> > @ln_indran integer,
> > @ln_valmin integer,
> > @ln_valmax integer,
> > @ls_operac char(9),
> > @li_indins integer,
> > @li_indmod integer,
> > @li_indeli integer,
> > @ls_deslla varchar(100),
> > @ls_cadena varchar(100),
> > @ls_val_del varchar(100),
> > @ls_val_ins varchar(100),
> > @ls_val_clave varchar(100),
> > @ls_cadena_clave varchar(100),
> > @ldt_fecha datetime,
> > @li_numreg integer,
> > @ls_sentencia_del varchar(100),
> > @ls_sentencia_ins varchar(100),
> > @ls_sentencia_ins_null varchar(250),
> > @ls_sentencia varchar(500),
> > @li_valor integer,
> > @ls_apos varchar(1),
> > @li_open_cursor integer
> >
> > BEGIN
> > select @li_open_cursor = 0
> > select @ls_apos = char(39)
> > select @ldt_fecha = getdate()
> >
> > exec usp_u_id_proceso @li_id_proceso output
> >


y
> > obtener los valores del hotel y de la localidad
> > select @ls_codhot = ist_codhot,
> > @ls_codalm = ist_codalm,
> > @ls_usuari = ist_usuari
> > from CMT_INGSIS WITH (NOLOCK)
> > where ist_iningr = @li_id_proceso
> >
> > select * into #1del from deleted
> > select * into #1ins from inserted
> >
> > select @ls_deslla = ttm_deslla
> > from cmm_tabtab
> > where ttm_codtab = 'RSC_RESERV'
> >
> > select @ls_cadena_clave = 'select ' + @ls_deslla + ' from #1del'
> >
> > If(select count(*) from deleted ) = 0 and (select count(*) from
> inserted)
> > > 0
> > begin
> > select @ls_operac = 'INSERTA'
> > select @ls_cadena_clave = 'select ' + @ls_deslla + ' from #1ins'
> > DECLARE C_PARAUD_INS_RSC_RESERV CURSOR FOR
> > select pau_codtab, pau_codcam, pau_indins, pau_indmod,
> > pau_indeli, pau_indran, pau_valmin, pau_valmax
> > from cmm_paraud
> > where htc_codhot = @ls_codhot
> > and pau_codloc = @ls_codalm
> > and pau_codtab = 'RSC_RESERV'
> > and pau_chkeli = 0
> > and pau_indins = 1
> > set @li_open_cursor = 1
> > end
> >
> > If(select count(*) from deleted ) > 0 and (select count(*) from
> inserted)
> > > 0
> > begin
> > select @ls_operac = 'ACTUALIZA'
> > DECLARE C_PARAUD_ACT_RSC_RESERV CURSOR FOR
> > select pau_codtab, pau_codcam, pau_indins, pau_indmod,
> > pau_indeli, pau_indran, pau_valmin, pau_valmax
> > from cmm_paraud
> > where htc_codhot = @ls_codhot
> > and pau_codloc = @ls_codalm
> > and pau_codtab = 'RSC_RESERV'
> > and pau_chkeli = 0
> > and pau_indmod = 1
> > set @li_open_cursor = 1
> > end
> >
> > If(select count(*) from deleted ) > 0 and (select count(*) from
> inserted)
> > = 0
> > begin
> > select @ls_operac = 'ELIMINA'
> > DECLARE C_PARAUD_ELI_RSC_RESERV CURSOR FOR
> > select pau_codtab, pau_codcam, pau_indins, pau_indmod,
> > pau_indeli, pau_indran, pau_valmin, pau_valmax
> > from cmm_paraud
> > where htc_codhot = @ls_codhot
> > and pau_codloc = @ls_codalm
> > and pau_codtab = 'RSC_RESERV'
> > and pau_chkeli = 0
> > and pau_indeli = 1
> > set @li_open_cursor = 1
> > end
> >
> > if @li_open_cursor = 0 return
> >
> > If @ls_operac = 'INSERTA'
> > begin
> > OPEN C_PARAUD_INS_RSC_RESERV;
> > FETCH NEXT FROM C_PARAUD_INS_RSC_RESERV INTO @ls_codtab,
@ls_codcam,
> > @ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin, @ln_valmax
> >
> > WHILE @@FETCH_STATUS = 0
> > BEGIN
> campos
> > auditables
> > select @ls_sentencia_ins = 'SELECT '+ @ls_codcam +' FROM
#1ins'
> >
> > select @li_numreg = count(*) from CMR_REGUSR
> > if @li_numreg = 0
> > begin
> > select @li_numreg = 1
> > end
> > else
> > begin
> > select @li_numreg = max(isnull(RUR_NUMREG,0)) from
> CMR_REGUSR
> > select @li_numreg = @li_numreg + 1
> > end
> >
> > begin tran
> > INSERT INTO CMR_REGUSR (HTC_CODHOT, ALM_CODALM,
RUR_NUMREG,
> > RUR_USUARI, RUR_TABAFE,
RUR_CAMTAB,
> > RUR_CLAREG,
> > RUR_FECREG, RUR_OPERAC,
DUR_DATACT,
> > RUR_CHKELI,
> > RUR_CLAVAL)
> > exec ('SELECT ' + @ls_apos + @ls_codhot + @ls_apos + ',


'
+
> > @ls_apos + @ls_codalm + @ls_apos + ', ' + @li_numreg + ', ' +
> > @ls_apos + @ls_usuari + @ls_apos + ', ' + @ls_apos


+
> > @ls_codtab + @ls_apos + ', ' + @ls_apos + @ls_codcam + @ls_apos + ', '


+
> > @ls_apos + @ls_deslla + @ls_apos + ', ' +
> > @ls_apos + @ldt_fecha + @ls_apos + ', ' + @ls_apos


+
> > @ls_operac + @ls_apos + ', ' + '(' + @ls_sentencia_ins + ')' + ', ' +
'0'
> +
> > ', ' +
> > '(' + @ls_cadena_clave + ')')
> >
> > delete from CMR_REGUSR
> > where DUR_DATACT IS NULL
> >
> > if @ln_indran = 1
> > begin
> > delete from CMR_REGUSR
> > where HTC_CODHOT = @ls_codhot
> > and ALM_CODALM = @ls_codalm
> > and RUR_TABAFE = @ls_codtab
> > and RUR_CAMTAB = @ls_codcam
> > and convert(decimal(9,3),DUR_DATACT) >@ln_valmin
> > and convert(decimal(9,3),DUR_DATACT) <@ln_valmax
> > end
> > commit tran
> >
> > FETCH NEXT FROM C_PARAUD_INS_RSC_RESERV INTO @ls_codtab,
> > @ls_codcam, @ln_indins, @ln_indmod, @ln_indeli, @ln_indran,


@ln_valmin,
> > @ln_valmax
> > end
> > CLOSE C_PARAUD_INS_RSC_RESERV;
> > DEALLOCATE C_PARAUD_INS_RSC_RESERV;
> > end
> >
> > if @ls_operac = 'ACTUALIZA'
> > BEGIN
> > OPEN C_PARAUD_ACT_RSC_RESERV;
> > FETCH NEXT FROM C_PARAUD_ACT_RSC_RESERV INTO @ls_codtab,
@ls_codcam,
> > @ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin, @ln_valmax
> >
> > WHILE @@FETCH_STATUS = 0
> > BEGIN
> campos
> > auditables
> > select @ls_sentencia_del = 'SELECT '+ @ls_codcam +' FROM
#1del'
> > select @ls_sentencia_ins = 'SELECT '+ @ls_codcam +' FROM
#1ins'
> >
> > select @li_numreg = count(*) from CMR_REGUSR
> > if @li_numreg = 0
> > begin
> > select @li_numreg = 1
> > end
> > else
> > begin
> > select @li_numreg = max(isnull(RUR_NUMREG,0)) from
> CMR_REGUSR
> > select @li_numreg = @li_numreg + 1
> > end
> >
> > begin tran
> > INSERT INTO CMR_REGUSR (HTC_CODHOT, ALM_CODALM,
RUR_NUMREG,
> > RUR_DATANT,
> > RUR_USUARI, RUR_TABAFE,
RUR_CAMTAB,
> > RUR_CLAREG,
> > RUR_FECREG, RUR_OPERAC,
DUR_DATACT,
> > RUR_CHKELI,
> > RUR_CLAVAL)
> > exec ('SELECT ' + @ls_apos + @ls_codhot + @ls_apos + ',


'
+
> > @ls_apos + @ls_codalm + @ls_apos + ', ' + @li_numreg + ', ' + '(' +
> > @ls_sentencia_del + ')' + ', ' +
> > @ls_apos + @ls_usuari + @ls_apos + ', ' + @ls_apos


+
> > @ls_codtab + @ls_apos + ', ' + @ls_apos + @ls_codcam + @ls_apos + ', '


+
> > @ls_apos + @ls_deslla + @ls_apos + ', ' +
> > @ls_apos + @ldt_fecha + @ls_apos + ', ' + @ls_apos


+
> > @ls_operac + @ls_apos + ', ' + '(' + @ls_sentencia_ins + ')' + ', ' +
'0'
> +
> > ', ' +
> > '(' + @ls_cadena_clave + ')')
> >
> > delete from CMR_REGUSR
> > where DUR_DATACT = RUR_DATANT
> > or ( dur_DATACT is null
> > and RUR_DATANT is null )
> >
> > if @ln_indran = 1
> > begin
> > delete from CMR_REGUSR
> > where HTC_CODHOT = @ls_codhot
> > and ALM_CODALM = @ls_codalm
> > and RUR_TABAFE = @ls_codtab
> > and RUR_CAMTAB = @ls_codcam
> > and convert(decimal(9,3),DUR_DATACT) >@ln_valmin
> > and convert(decimal(9,3),DUR_DATACT) <@ln_valmax
> >
> > end
> > commit tran
> >
> > FETCH NEXT FROM C_PARAUD_ACT_RSC_RESERV INTO @ls_codtab,
> > @ls_codcam, @ln_indins, @ln_indmod, @ln_indeli, @ln_indran,


@ln_valmin,
> > @ln_valmax
> > END
> > CLOSE C_PARAUD_ACT_RSC_RESERV;
> > DEALLOCATE C_PARAUD_ACT_RSC_RESERV;
> > END
> >
> > If @ls_operac = 'ELIMINA'
> > begin
> > OPEN C_PARAUD_ELI_RSC_RESERV;
> > FETCH NEXT FROM C_PARAUD_ELI_RSC_RESERV INTO @ls_codtab,
@ls_codcam,
> > @ln_indins, @ln_indmod, @ln_indeli, @ln_indran, @ln_valmin, @ln_valmax
> >
> > WHILE @@FETCH_STATUS = 0
> >
> > BEGIN
> campos
> > auditables
> > select @ls_sentencia_del = 'SELECT '+ @ls_codcam +' FROM
#1del'
> >
> > select @li_numreg = count(*) from CMR_REGUSR
> > if @li_numreg = 0
> > begin
> > select @li_numreg = 1
> > end
> > else
> > begin
> > select @li_numreg = max(isnull(RUR_NUMREG,0)) from
> CMR_REGUSR
> > select @li_numreg = @li_numreg + 1
> > end
> >
> > begin tran
> > INSERT INTO CMR_REGUSR (HTC_CODHOT, ALM_CODALM,
RUR_NUMREG,
> > RUR_DATANT,
> > RUR_USUARI, RUR_TABAFE,
RUR_CAMTAB,
> > RUR_CLAREG,
> > RUR_FECREG, RUR_OPERAC,
RUR_CHKELI,
> > RUR_CLAVAL)
> > exec ('SELECT ' + @ls_apos + @ls_codhot + @ls_apos + ',


'
+
> > @ls_apos + @ls_codalm + @ls_apos + ', ' + @li_numreg + ', ' + '(' +
> > @ls_sentencia_del + ')' + ', ' +
> > @ls_apos + @ls_usuari + @ls_apos + ', ' + @ls_apos


+
> > @ls_codtab + @ls_apos + ', ' + @ls_apos + @ls_codcam + @ls_apos + ', '


+
> > @ls_apos + @ls_deslla + @ls_apos + ', ' +
> > @ls_apos + @ldt_fecha + @ls_apos + ', ' + @ls_apos


+
> > @ls_operac + @ls_apos + ', ' + '0' + ', ' +
> > '(' + @ls_cadena_clave + ')')
> > commit tran
> >
> > FETCH NEXT FROM C_PARAUD_ELI_RSC_RESERV INTO @ls_codtab,
> > @ls_codcam, @ln_indins, @ln_indmod, @ln_indeli, @ln_indran,


@ln_valmin,
> > @ln_valmax
> > END
> > CLOSE C_PARAUD_ELI_RSC_RESERV;
> > DEALLOCATE C_PARAUD_ELI_RSC_RESERV;
> > end
> > END
> >
> > TABLA QUE ESTUVO PROBANDO (RSC_RESERV)
> >
> > 3 HTC_CODHOT char 3 0
> > 2 RSC_CODLOC char 3 0
> > 2 RSC_NUMRES char 10 0
> > 0 CLM_CODCLI char 10 1
> > 0 COM_CODCOU char 7 1
> > 0 RSC_TIPGRU varchar 2 1
> > 0 RSC_NOMGRU varchar 100 1
> > 0 RSC_TIPMER varchar 5 1
> > 0 RSC_OPEREF varchar 10 1
> > 0 RSC_EMPREF varchar 100 1
> > 0 RSC_RESAGE varchar 10 1
> > 0 RSC_FECRES datetime 8 1
> > 0 RSC_FECING datetime 8 1
> > 0 RSC_FECSAL datetime 8 1
> > 0 RSC_NUMNOC int 4 1
> > 0 RSC_DIACON int 4 1
> > 0 RSC_DIACRE int 4 1
> > 0 RSC_CANPAX smallint 2 1
> > 0 RSC_VIALLE varchar 1 1
> > 0 RSC_HORLLE datetime 8 1
> > 0 RSC_EMPLLE varchar 4 1
> > 0 RSC_VUELLE int 4 1
> > 0 RSC_VIASAL varchar 1 1
> > 0 RSC_HORSAL datetime 8 1
> > 0 RSC_EMPSAL varchar 4 1
> > 0 RSC_VUESAL int 4 1
> > 0 RSC_FECREC datetime 8 1
> > 0 RSC_IMPIGV bit 1 1
> > 0 RSC_PORIGV decimal 9 1
> > 0 RSC_CARSER bit 1 1
> > 0 RSC_PORSER decimal 9 1
> > 0 RSC_ESTRES char 2 1
> > 0 RSC_ESTMUL char 2 1
> > 0 RSC_FECEMI datetime 8 1
> > 0 RSC_FECCON datetime 8 1
> > 0 RSC_FECANU datetime 8 1
> > 0 RSC_FECCAN datetime 8 1
> > 0 RSC_TIPMON varchar 1 1
> > 0 RSC_TIPCOM decimal 9 1
> > 0 RSC_TIPVEN decimal 9 1
> > 0 RSC_PORDES decimal 9 1
> > 0 RSC_TOTSOL decimal 9 1
> > 0 RSC_TOTDOL decimal 9 1
> > 0 RSC_DESFAC char 3 1
> > 0 RSC_MODDIV bit 1 1
> > 0 RSC_TIPFAC char 2 1
> > 0 RSC_EMPFAC char 10 1
> > 0 RSC_FORRES char 2 1
> > 0 RSC_NOMTOU char 5 1
> > 0 RSC_CHKING bit 1 1
> > 0 RSC_CHKSAL bit 1 1
> > 0 RSC_TIPCON char 2 1
> > 0 RSC_TIPRES char 2 1
> > 0 RSC_AUTCON varchar 100 1
> > 0 RSC_SWMAIL bit 1 1
> > 0 RSC_NUMCON char 5 1
> > 0 RSC_USUARI varchar 8 1
> > 0 RSC_CHKELI bit 1 1
> > 0 rowguid uniqueidentifier 16 0
> >
> > TABLA CMM_PARAUD
> >
> > 3 HTC_CODHOT char 3 0
> > 2 PAU_CODLOC char 3 0
> > 2 PAU_CODPAU numeric 9 0
> > 0 PAU_CODTAB varchar 15 1
> > 0 PAU_CODCAM varchar 15 1
> > 0 PAU_INDINS bit 1 1
> > 0 PAU_INDMOD bit 1 1
> > 0 PAU_INDELI bit 1 1
> > 0 PAU_INDRAN bit 1 1
> > 0 PAU_VALMIN decimal 9 1
> > 0 PAU_VALMAX decimal 9 1
> > 0 PAU_USUARI varchar 8 1
> > 0 PAU_CHKELI bit 1 1
> > 0 rowguid uniqueidentifier 16 0
> >
> > TABLA CMR_REGUSR
> >
> > 3 HTC_CODHOT char 3 0
> > 2 ALM_CODALM char 3 0
> > 2 RUR_NUMREG numeric 9 0
> > 0 RUR_USUARI varchar 8 1
> > 0 RUR_TABAFE char 10 1
> > 0 RUR_CAMTAB varchar 50 1
> > 0 RUR_CLAREG varchar 100 1
> > 0 RUR_FECREG datetime 8 1
> > 0 RUR_OPERAC varchar 20 1
> > 0 RUR_DATANT varchar 50 1
> > 0 DUR_DATACT varchar 50 1
> > 0 RUR_CLAVAL varchar 50 1
> > 0 RUR_CHKELI bit 1 1
> > 0 rowguid uniqueidentifier 16 0
> >
> > lo que me dice el programador es que este cada vez que se hace un
insert,
> > update o delete de cualquier tabla de su sistema
> > este trigger deberia dispararse, por lo tanto a creado uno en cada


tabla
> de
> > su aplicacion, lo que que hace es buscar los
> > parametros de la auditoria en la tabla "cmm_paraud" de alli saca si la
> tabla
> > se audita y si el campo afectado se audita, de
> > acuerdo a eso graba la informacion en la tabla "cmr_regusr", el estuvo
> > probando y le funcionaba bien hasta que comenzo a
> > fallar y no sabe porque, lo que me dice es que cuando borro la tabla
> > "cmm_paraud" y dejo solo la definicion de auditoria de
> > la tabla que estuvo probando (81 registros quedaron y tenia 1560
aprox.),
> si
> > le funciona, el asunto es que necesita poner los
> > otros registros qyue borro necesariamente.
> >
> > gracias por la ayuda.
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > "Maximiliano Damian Accotto"


wrote
in
> > message news:
> > > Hola, sin la estructura del trigger y tablas es casi imposible
> ayudarte!!
> > > podrias ser tan amable de darnos mas informacion?
> > >
> > > gracias
> > >
> > >
> > > Salu2 enormes
> > >
> > > Maximiliano Damian Accotto
> > >
> > > Fundicion San Cayetano S.A.
> > > Gerente de IT
> > > Buenos Aires - Argentina
> > > -
> > > Desarrollador 3 estrellas
> > >
>


http://www.microsoft.com/spanish/ms...efault.asp
> > > -
> > > (maxi_accotto[arroba]speedy.com.ar)
> > > MSN:
> > > -
> > >
> > > "Gustavo Villaran" escribió en el mensaje
> > > news:
> > > > hola,
> > > >
> > > > estoy tratando de hacer un update a una tabla en la cual modifico


un
> > solo
> > > > campo,
> > > > al terminar el update, este debe disparar un trigger que graba en
otra
> > > > tabla, el tipo
> > > > de operacion que se hizo sobre la tabla anterior y el valor de los
> > campos
> > > > modificados,
> > > > esta sirve para auditoria.
> > > >
> > > > al ejecutar un update sobre la tabla me sale el error siguiente :
> > > >
> > > > Process 67 unlocking unowned resource: TAB: 10:334884510
> > > >
> > > > alguien sabe como solucionar esto?
> > > >
> > > > gracias
> > > >
> > > >
> > >
> > >
> >
> >
>
>


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