Tengo un windows 2000 Server con Sql Server 2000 de base de datos. Cuando modifico tengo un sp que me hace las modificaciones. El problema es que durante el mes se pierden dos o tres detalles de una partida. Hay aproximadamente 20 personas trabajando constantemente con el servidor y unas tres con la información de las partidas.
La pregunta es:
El servidor es un servidor HP con procesador XEO y tiene 256 M de RAM
Es posible que ocurran problemas como el que yo tengo debido a falta de memoria RAM?
Muchas gracias por sus comentarios.
El sp es :
-- use bdss000
-- =============================================
-- MOFICIACIÓN DE LAS PARTIDAS
-- =============================================
-- manejo de transacciones
-- IF EXISTS (SELECT name FROM sysobjects WHERE name = N'<procedure_name, sysname, proc_test>' AND type = 'P')
/* PROC EJECUTA LA MODIFICACIÓN DE LAS PARTIDAS CONTABLES */
-- DROP PROCEDURE sp_CT_Modificacion
CREATE PROCEDURE sp_CT_Modificacion @clave bigInt, @tran as nVarChar(30),
@tipoAntes nVarChar(4), @AsientoAntes nVarChar(50), @periodo nVarChar(10),
@tipoDespues nVarChar(4), @AsientoDespues nVarChar(50),
--parametros del sp_AsignarSaldosConta
@consolidado int,
@Nivel1 int, @Nivel2 int, @Nivel3 int, @Nivel4 int, @Nivel5 int, @Nivel6 int,
--parámetros de los cambios finales
@descripcion nVarChar(250), @fecha dateTime, @documento nVarChar(20) ,@nombre nVarChar(200),
@Sistema nVarchar(50)
AS
-- 0. Iniciar transacción
BEGIN TRANSACTION @tran
-- 1. Si no existe el registro entonces se sale y borrar el temporal
if not exists (select * from encaASientosN where @asientoAntes = asiento and @tipoAntes= tipoPartida and @periodo= periodo )
begin RAISERROR ('Recuperación por concurrencia, la partida ya fue modificada por otro usuario. PASO "1", intente nuevamente ', 16, 1) rollback transaction @tran goto salir end
-- 2. Revertir saldos en la conta
EXECUTE sp_AsignarSaldosConta @consolidado , @Nivel1, @Nivel2 , @Nivel3 , @Nivel4 , @Nivel5 , @Nivel6 , @asientoAntes , @tipoAntes , 1 , @periodo
if @@error != 0 begin RAISERROR ('Transacción Denegada PASO "2", intente nuevamente ', 16, 1) rollback transaction @tran goto salir end
-- 3. Borra la partida pasada
DELETE from detaAsientoN where @asientoAntes = asiento and @tipoAntes= tipoPartida and @periodo= periodo
if @@error != 0 begin RAISERROR ('Transacción Denegada PASO "3", intente nuevamente ', 16, 1) rollback transaction @tran goto salir end
DELETE from encaAsientosN where @asientoAntes = asiento and @tipoAntes= tipoPartida and @periodo= periodo
if @@error != 0 begin RAISERROR ('Transacción Denegada PASO "3-1", intente nuevamente ', 16, 1) rollback transaction @tran goto salir end
-- 4. Insertar las tuplas que se encuentran en tmpEncaAsientosN y tmpDetaAsientoN
UPDATE encaAsientosNbk set fecha= @fecha, descripcion= @descripcion, documento = case @sistema when 'CONTA' then documento else @documento end , nombre = case @sistema when 'CONTA' then nombre else @nombre end
where @asientoDespues = asiento and @tipoDespues= tipoPartida and @periodo= periodo and clave = @clave
if @@error != 0 begin RAISERROR ('Transacción Denegada PASO "4", intente nuevamente ', 16, 1) rollback transaction @tran goto salir end
UPDATE detaAsientoNbk set fecha= @fecha
where @asientoDespues = asiento and @tipoDespues= tipoPartida and @periodo= periodo and clave = @clave
if @@error != 0 begin RAISERROR ('Transacción Denegada PASO "4-1", intente nuevamente ', 16, 1) rollback transaction @tran goto salir end
-- 5. Regresar los registros en temporales a las tablas reales
INSERT into encaAsientosN(asiento,tipoPartida, fecha,descripcion,monto,origen,documento,tipo,cuad rado,asentado,periodo,nombre )
select asiento,tipoPartida, fecha,descripcion,monto,origen,documento,tipo,cuad rado,asentado,periodo,nombre
from encaAsientosNbk
where @asientoDespues = asiento and @tipoDespues= tipoPartida and @periodo= periodo and clave = @clave
if @@error != 0 begin RAISERROR ('Transacción Denegada PASO "5", intente nuevamente ', 16, 1) rollback transaction @tran goto salir end
-- 6. Regresar los registros en temporales a las tablas reales
INSERT into detaAsientoN( asiento, tipoPartida, cuenta,Doh,debe,haber,detalle,fecha, documento,tipo,periodo,saldo)
select asiento, tipoPartida, cuenta,Doh,debe,haber,detalle,fecha, documento,tipo,periodo,saldo
from detaAsientoNbk
where @asientoDespues = asiento and @tipoDespues= tipoPartida and @periodo= periodo and clave = @clave
if @@error != 0 begin RAISERROR ('Transacción Denegada PASO "6", intente nuevamente ', 16, 1) rollback transaction @tran goto salir end
-- 7. ACTUALIZAR LOS SALDOS
EXECUTE sp_AsignarSaldosConta @consolidado , @Nivel1, @Nivel2 , @Nivel3 , @Nivel4 , @Nivel5 , @Nivel6 , @asientoDespues , @tipoDespues , 0 , @periodo
if @@error != 0 begin RAISERROR ('Transacción Denegada PASO "7", intente nuevamente ', 16, 1) rollback transaction @tran goto salir end
-- 8. Registrar la cuenta para actualización del kardex en la cuenta bancaria.
INSERT into CT_ActuCuenta (cuenta,fecha,clave)
select D.cuenta, d.fecha, @clave clave
from detaAsientoNbk d , CuentasBcos b
where b.cuentac = d.cuenta and @asientoDespues = asiento and
@tipoDespues= tipoPartida and @periodo= periodo and clave = @clave
if @@error != 0 begin RAISERROR ('Transacción Denegada PASO "8", intente nuevamente ', 16, 1) rollback transaction @tran goto salir end
-- 9. Borra la partida temporal
DELETE from detaAsientoNbk where @asientoDespues = asiento and @tipoDespues= tipoPartida and @periodo= periodo
if @@error != 0 begin RAISERROR ('Transacción Denegada PASO "9", intente nuevamente ', 16, 1) rollback transaction @tran goto salir end
DELETE from encaAsientosNbk where @asientoDespues = asiento and @tipoDespues= tipoPartida and @periodo= periodo
if @@error != 0 begin RAISERROR ('Transacción Denegada PASO "9-1", intente nuevamente ', 16, 1) rollback transaction @tran goto salir end
-- 10. Transacción Cometida
COMMIT TRANSACTION @tran
salir:
GO