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

#6 Javier Loria
13/04/2004 - 14:30 | Informe spam
Hola Gustavo:
Tal vez podrias decirle al programador que lo extrano no es que falle,
lo raro seria que del todo corriera. :( Es tan inestable la arquitectura
que ni el mismo la entiende. Triggers con Tablas Temporales, Cursores y SQL
Dinamico hacen este codigo: lento, feo, inestable, imposible de mantener,
inseguro, etc
En todo caso esto podria ser un problema de Parallismo (asumiendo que el
servidor tiene multiples procesadores), hay varios articulos de MS sobre el
tema:
a) Aplica el ultimo SP.
b) Configura (temporalmente) el servidor para minimizar el maximo grado
de paralelismo a 1. Esto lo haces con el Enterprise Manager, sobre el
servidor clic derecho, properties, processor, y en la seccion de Parallelism
escoges 1.
En todo caso te recomendaria un cambio de arquitectura.

Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Gustavo Villaran escribio:
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

proceso 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
#7 Jose Mariano Alvarez \(MUG\)
13/04/2004 - 18:02 | Informe spam
Te paso algunas recomendaciones para hacerlas en orden:

Mira, el codigo tal como te dijeron es muy complicado por lo dinamico.
Segundo, podrias eliminar tranquilamente las tablas temporales, y deberias
hacerlo. Esto es importante
Segundo, deberias ver si puedes cambiar el cursor por instrucciones de
conjunto.
Simplifica la logica.
Prueba hacer un DBCC de la base

Si todo esto no funciona deberas abrir un incidente en Ms.

Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar



"Gustavo Villaran" wrote in message
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
> >
> >
>
>


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