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

Integridad de los Datos 2

Estas en el tema de Integridad de los Datos 2 en el foro de SQL Server en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 18/02/2008, 17:34
 
Fecha de Ingreso: septiembre-2007
Mensajes: 2
Antigüedad: 17 años, 2 meses
Puntos: 0
Integridad de los Datos 2

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
  #2 (permalink)  
Antiguo 18/02/2008, 19:10
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Re: Integridad de los Datos 2

A simple vista, cada que tu ejecutas tu store, generar una transaccion diferente (por parametro), ¿Porque no dejar el nombre de la transaccion fija y que exista una "cola" de espera para las transacciones?
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 14:01.