Experiencias
Dentro de las experiencias esta trabajar con un patrón para el diseño.
Total Horas Trabajadas:
20 Luis Diego
22.5 Edward Ovares
42.5 Horas
miércoles, 5 de noviembre de 2014
lunes, 3 de noviembre de 2014
Creación de método Transferencia
Creación de método Transferencia
9 Horas
Éste método fue el más difícil por ser el más enredado y el más extenso, la dificultad residía en ser un movimiento de una cuenta a otra, visto en tablas, una referencia entre la misma tabla. Ademas de guardar el movimiento se tuvo que tomar en cuenta los bancos desde los que se hacía el movimiento y también se tuvo que modificar los saldos de las respectivas cuentas. El problema, que no se pudo solucionar, fue optimizar el procedure de manera que se automatizara para evitar depender de tantos parámetros en el procedure. Otro problema fue acomodar bien las validaciones de manera que el procedure diera los resultados esperados (usualmente retornaba tablas vacías o sin alterar).
-- ########################################################################################################################
-- Stored Procedure of Transferencia
-- ########################################################################################################################
-- Verify that the stored procedure does not exist.
IF OBJECT_ID(N'CA_SP_Transferencia', N'P') IS NOT NULL
DROP PROCEDURE CA_SP_Transferencia;
GO
CREATE PROCEDURE [dbo].[CA_SP_Transferencia]
@CuentaDepositante INT ,
@CuentaDepositada INT ,
@Monto MONEY ,
@TipoMovimiento1 INT ,
@TipoMovimiento2 INT ,
@TipoMedio1 INT ,
@TipoMedio2 INT ,
@Fecha DATETIME ,
@IdBanco INT ,
@Banco1 INT ,
@Banco2 INT ,
@ReturnValue INT OUTPUT
AS
BEGIN TRY
IF (( EXISTS( SELECT * FROM [dbo].[CA_Cuenta] WHERE (Id = @CuentaDepositante)))--existen ambas cuentas
AND (EXISTS(SELECT * FROM [dbo].[CA_Cuenta] WHERE ( Id = @CuentaDepositada))))
BEGIN
IF((SELECT SaldoReal FROM dbo.CA_Cuenta WHERE @CuentaDepositante = Id) > @Monto )--monto suficiente
BEGIN
IF (EXISTS(SELECT * FROM dbo.CA_Banco WHERE Id = @Banco1 )AND EXISTS (SELECT * FROM dbo.CA_Banco WHERE Id = @Banco2))-- Existen los bancos
BEGIN
DECLARE @recargo int
SET @recargo = 0
IF (@Banco1 != @Banco2)
SET @recargo = 265
BEGIN TRANSACTION
--Movimiento a cuenta depositante
INSERT INTO dbo.CA_Movimiento ( FK_Cuenta ,FK_TipoMovimiento ,FK_TipoMedio ,FechaHora ,Monto)
VALUES ( @CuentaDepositante ,@TipoMovimiento1 ,@TipoMedio1 ,@Fecha ,@Monto)
UPDATE dbo.CA_Cuenta
SET SaldoReal = SaldoReal - (@Monto+@recargo)
WHERE Id = @CuentaDepositante
--Movimiento a cuenta depositada
INSERT INTO dbo.CA_Movimiento( FK_Cuenta ,FK_TipoMovimiento ,FK_TipoMedio ,FechaHora ,Monto)
VALUES ( @CuentaDepositada ,@TipoMovimiento2 ,@TipoMedio2 ,@Fecha ,@Monto)
UPDATE dbo.CA_Cuenta
SET SaldoReal = SaldoReal + @Monto
WHERE Id = @CuentaDepositada
COMMIT
END
ELSE
BEGIN
PRINT 'No existe el banco'
END
END
ELSE
BEGIN
PRINT 'Monto insuficiente'
END
END
ELSE
BEGIN
PRINT 'Cuenta inexistente'
END
END TRY
BEGIN CATCH
PRINT 'Error de transaction'
END CATCH
viernes, 31 de octubre de 2014
Creación de Procedure Estado Cuenta
Creación de Procedure Estado Cuenta
6 Horas
En éste procedure sin lugar a dudas fue la comprobación de su funcionalidad. Se tuvo que cambiar el método una gran cantidad de veces antes de que comenzara a retornar datos acertados.
Así mismo la comprobación en sí de éste método, al ser tantos datos y al ser la mayoría de éstos números se tornó sumamente tediosa y engorrosa.
Otra dificultad que vale la pena mencionar fue el hecho de validar que el límite de fecha sea de 12 meses con respecto a la fecha actual, ya que tanto en la tabla de estado de cuentas y en la tabla de cuentas se tenían tipos de datetime, lo que volvía éste método muy confuso
-- ########################################################################################################################
-- Stored Procedure of EstadoCuenta
-- ########################################################################################################################
-- Verify that the stored procedure does not exist.
IF OBJECT_ID(N'CA_SP_EstadoCuenta', N'P') IS NOT NULL
DROP PROCEDURE CA_SP_EstadoCuenta;
GO
CREATE PROCEDURE [dbo].[CA_SP_EstadoCuenta]
@Cuenta INT ,
@Fecha DATETIME
AS
BEGIN TRY
IF(@Fecha BETWEEN DATEADD(MONTH,-12,@Fecha) AND GETDATE())
BEGIN
BEGIN TRANSACTION
SELECT * FROM dbo.CA_EstadoCuenta
WHERE FK_Cuenta = @Cuenta
AND YEAR(@Fecha) = YEAR(Fecha)
AND MONTH(@Fecha)=MONTH(Fecha)
COMMIT
END
ELSE
BEGIN
PRINT 'Fecha fuera de rango'
END
END TRY
BEGIN CATCH
PRINT'No se encontro el estado de cuenta buscado'
END CATCH
GO
miércoles, 29 de octubre de 2014
Creación de método Depósito Y Retiro
Creación de método Depósito y Retiro
5 horas
La mayor complicación en éste procedure fue por dudas de implementación. Más específicamente, cuáles tablas habrían de ser modificadas. Se concluyó que la única tabla que convenía actualizar era la de Cuenta y la de movimientos.
-- ########################################################################################################################
-- Stored Procedure of Deposito
-- ########################################################################################################################
-- Verify that the stored procedure does not exist.
IF OBJECT_ID(N'CA_SP_Deposito', N'P') IS NOT NULL
DROP PROCEDURE CA_SP_Deposito;
GO
CREATE PROCEDURE [dbo].[CA_SP_Deposito]
@Cuenta INT ,
@TipoMovimiento INT ,
@TipoMedio INT ,
@Monto MONEY
AS
BEGIN TRY
IF ( NOT EXISTS ( SELECT * FROM [dbo].[CA_Cuenta] WHERE (Id = @Cuenta)))
PRINT 'No existe la cuenta'
BEGIN TRANSACTION
--crea el movimiento
INSERT INTO dbo.CA_Movimiento(FK_Cuenta,FK_TipoMovimiento,FK_TipoMedio,FechaHora,Monto)
VALUES (@Cuenta,@TipoMovimiento,@TipoMedio,GETDATE(),@Monto)
--Actualiza saldo
UPDATE dbo.CA_Cuenta
SET SaldoReal = SaldoReal + @Monto
WHERE dbo.CA_Cuenta.Id = @Cuenta
END TRY
BEGIN CATCH
PRINT 'Error en la transaction'
END CATCH
GO
-- ########################################################################################################################
-- Stored Procedure of Retiro
-- ########################################################################################################################
-- Verify that the stored procedure does not exist.
IF OBJECT_ID(N'CA_SP_Retiro', N'P') IS NOT NULL
DROP PROCEDURE CA_SP_Retiro;
GO
CREATE PROCEDURE [dbo].[CA_SP_Retiro]
@Cuenta INT ,
@TipoMovimiento INT ,
@TipoMedio INT ,
@Monto MONEY
AS
BEGIN TRY
IF (( NOT EXISTS ( SELECT * FROM [dbo].[CA_Cuenta] WHERE (Id = @Cuenta)))AND(SELECT SaldoReal FROM dbo.CA_Cuenta WHERE Id = @Cuenta)>@Monto)
PRINT 'No existe la cuenta o el fondo es insuficiente'
BEGIN TRANSACTION
--crea el movimiento
INSERT INTO dbo.CA_Movimiento(FK_Cuenta,FK_TipoMovimiento,FK_TipoMedio,FechaHora,Monto)
VALUES (@Cuenta,@TipoMovimiento,@TipoMedio,GETDATE(),@Monto)
--Actualiza saldo
UPDATE dbo.CA_Cuenta
SET SaldoReal = SaldoReal - @Monto
WHERE dbo.CA_Cuenta.Id = @Cuenta
END TRY
BEGIN CATCH
PRINT 'Error en la transaction'
END CATCH
GO
lunes, 27 de octubre de 2014
Migración de Cuentas
Migración de Cuentas
Se migran los datos de cuentas ordenados por fechas cada uno desde la mas antigua a la mas reciente. Esto para evitar errores a la hora de procesar datos.
Errores dentro de este procedimiento no se encuentran, a única observación seria la de que no se valida que los datos no están repetidos a la hora de insertar.
Horas Trabajadas: 1 hora
Autor: Edward Ovares Villegas
Se migran los datos de cuentas ordenados por fechas cada uno desde la mas antigua a la mas reciente. Esto para evitar errores a la hora de procesar datos.
Errores dentro de este procedimiento no se encuentran, a única observación seria la de que no se valida que los datos no están repetidos a la hora de insertar.
-----------------------------------------------------------------------------------------------------------------------
-- Verifica si el procedure existe, para eliminarla
IF OBJECT_ID ( N'MG_SP_MIGRAR_DATOS_CUENTAS', N'P' ) IS NOT NULL
DROP PROCEDURE MG_SP_MIGRAR_DATOS_CUENTAS;
GO
-- Create procedure for read file
CREATE PROCEDURE [dbo].[MG_SP_MIGRAR_DATOS_CUENTAS]
AS
BEGIN
BEGIN TRY
BEGIN TRANSACTION
-- Insert Cuenta
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Cuenta]
(FK_TipoCuenta, FK_Cliente,SaldoReal, SaldoPendiente, SaldoIntereses,FechaEstadoCuenta)
SELECT FK_TipoCuenta, FK_Cliente, SaldoReal, SaldoPendiente, SaldoIntereses, fechaEstadoCuenta
FROM FileCuenta
IF @@TRANCOUNT > 0
COMMIT TRANSACTION; -- Commit transaction
PRINT 'Commit transaction.';
RETURN 1;
END TRY
BEGIN CATCH --ERROR in the transaction
EXEC MG_SP_GetErrorInfo;
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION; -- ROLLBACK of trasaction
PRINT 'Error: Rolling back transaction.';
RETURN @@ERROR*-1;
END CATCH;
END
GO
Horas Trabajadas: 1 hora
Autor: Edward Ovares Villegas
viernes, 24 de octubre de 2014
Migración de Movimientos
En la migración de los movimientos se realiza por fechas de la mas antigua a la mas reciente.
De una forma que por lo general inserta el nuevo movimiento y hace un cambio en el saldo de la cuenta.
Dentro de los errores encontrados están que habían saldos que quedaban negativos perjudicando los datos.
También se encontró problemas de incompatibilidad de datos. Esto se soluciono haciendo unos cast y convert.
-----------------------------------------------------------------------------------------------------------------------
-- Verifica si el procedure existe, para eliminarla
IF OBJECT_ID ( N'MG_SP_MIGRAR_DATOS_MOVIMIENTOS', N'P' ) IS NOT NULL
DROP PROCEDURE MG_SP_MIGRAR_DATOS_MOVIMIENTOS;
GO
-- Create procedure for read file
CREATE PROCEDURE [dbo].[MG_SP_MIGRAR_DATOS_MOVIMIENTOS]
AS
BEGIN
BEGIN TRY
-- Declaracion de variables del procedure
DECLARE @counter int,@max int; -- Contador del while y max
DECLARE @TipoOperacion nvarchar(255);
-----------------------------------------------------------------------------------------
-- INICIO DATOS MOVIMIENTOS
-- Set de datos
DECLARE @FK_Movimiento INT;
DECLARE @FK_Banco INT;
DECLARE @FK_TipoGestion INT;
DECLARE @FK_TipoMovimiento int
DECLARE @Nombre varchar(50)
SET @counter = 1;
SET @max = (SELECT COUNT(*) FROM dbo.FileMovimientos fm)+1;
BEGIN TRANSACTION
--Inicio del ciclo de while
WHILE @counter < @max
BEGIN
-- Busca el tipo de operacion a ejecutar
SET @TipoOperacion = (SELECT d.TipoOperacion FROM dbo.FileMovimientos d WHERE d.ID = @counter);
-- Inicio del IF
IF @TipoOperacion = 'MovimientoInteres' -- Movimiento Interes
BEGIN
-- Declaracion de tipos
SET @FK_TipoMovimiento = 0
SET @FK_TipoMovimiento = (SELECT FK_TipoMovimiento FROM dbo.FileMovimientos fm WHERE ID = @counter);
IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimientoInteres]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimientoInteres.Nombre = 'Credito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento Intereses
INSERT INTO [CuentasAhorroDB].[dbo].[CA_MovimientosIntereses]
(FK_Cuenta,FK_TipoMovimientoInteres, Fecha, Monto)
SELECT FK_Cuenta, FK_TipoMovimiento, Fecha, Monto
FROM dbo.FileMovimientos fm
WHERE ID = @counter
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoIntereses = SaldoIntereses+fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento Interes(Credito).'
END
ELSE IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimientoInteres]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimientoInteres.Nombre = 'Debito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento Intereses
INSERT INTO [CuentasAhorroDB].[dbo].[CA_MovimientosIntereses]
(FK_Cuenta,FK_TipoMovimientoInteres, Fecha, Monto)
SELECT FK_Cuenta, FK_TipoMovimiento, Fecha, Monto
FROM dbo.FileMovimientos fm
WHERE ID = @counter
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoIntereses = SaldoIntereses+fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento Interes(Debito).'
END
END
ELSE IF @TipoOperacion = 'MovimientoPendiente' -- Movimiento Pendiente
BEGIN
-- Declaracion de tipos
SET @FK_TipoMovimiento = 0
SET @FK_TipoMovimiento = (SELECT FK_TipoMovimiento FROM dbo.FileMovimientos fm WHERE ID = @counter);
IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimientoPendiente]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimientoPendiente.Nombre = 'Credito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento
INSERT INTO [CuentasAhorroDB].[dbo].[CA_MovimientoPendiente]
(FK_Cuenta, FK_TipoMovimientoPendiente, Monto, FechaHora)
SELECT FK_Cuenta, FK_TipoMovimiento,Monto,Fecha
FROM dbo.FileMovimientos fm
WHERE ID = @counter
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoPendiente = SaldoPendiente+fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento Pendiente(Credito).'
END
ELSE IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimientoPendiente]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimientoPendiente.Nombre = 'Debito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento
INSERT INTO [CuentasAhorroDB].[dbo].[CA_MovimientoPendiente]
(FK_Cuenta, FK_TipoMovimientoPendiente, Monto, FechaHora)
SELECT FK_Cuenta, FK_TipoMovimiento, Monto, Fecha
FROM dbo.FileMovimientos fm
WHERE ID = @counter
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoPendiente = SaldoPendiente-fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento Pendiente(Debito).'
END
END
ELSE IF @TipoOperacion = 'MovimientoEntreBancos' -- Movimiento Entre Bancos
BEGIN
-- Declaracion de tipos
SET @FK_TipoMovimiento = 0
SET @FK_TipoMovimiento = (SELECT FK_TipoMovimiento FROM dbo.FileMovimientos fm WHERE ID = @counter);
IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimiento]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimiento.Nombre = 'Credito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Movimiento]
(FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, FechaHora,Monto)
SELECT FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, Fecha, Monto
FROM dbo.FileMovimientos fm
WHERE ID = @counter
SET @FK_Movimiento = 0;
SET @FK_Banco = 0;
SET @FK_Movimiento = (SELECT TOP 1 Id FROM [CuentasAhorroDB].[dbo].[CA_Movimiento] C ORDER BY Id DESC);
SET @FK_Banco = (SELECT FK_Banco FROM dbo.FileMovimientos fm WHERE ID = @counter)
-- Insert MovimientoXBanco
INSERT INTO [CuentasAhorroDB].[dbo].[CA_MovCajeroAut]
( FK_Banco, FK_Movimiento)
VALUES
(@FK_Banco,@FK_Movimiento)
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoReal = SaldoReal+fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento Entre Bancos(Credito).'
END
ELSE IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimiento]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimiento.Nombre = 'Debito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Movimiento]
(FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, FechaHora,Monto)
SELECT FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, Fecha, Monto
FROM dbo.FileMovimientos fm
WHERE ID = @counter
SET @FK_Movimiento = 0;
SET @FK_Banco = 0;
SET @FK_Movimiento = (SELECT TOP 1 Id FROM [CuentasAhorroDB].[dbo].[CA_Movimiento] C ORDER BY Id DESC);
SET @FK_Banco = (SELECT FK_Banco FROM dbo.FileMovimientos fm WHERE ID = @counter)
-- Insert MovimientoXBanco
INSERT INTO [CuentasAhorroDB].[dbo].[CA_MovCajeroAut]
( FK_Banco, FK_Movimiento)
VALUES
(@FK_Banco,@FK_Movimiento)
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoReal = SaldoReal-fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento Entre Bancos(Debito).'
END
END
ELSE IF @TipoOperacion = 'MovimientoGestion' -- Movimiento Gestion
BEGIN
-- Declaracion de tipos
SET @FK_TipoMovimiento = 0
SET @FK_TipoMovimiento = (SELECT FK_TipoMovimiento FROM dbo.FileMovimientos fm WHERE ID = @counter);
IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimiento]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimiento.Nombre = 'Credito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Movimiento]
(FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, FechaHora,Monto)
SELECT FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, Fecha, Monto
FROM dbo.FileMovimientos fm
WHERE ID = @counter
SET @FK_Movimiento = 0;
SET @FK_TipoGestion = 0;
SET @FK_Movimiento = (SELECT TOP 1 Id FROM [CuentasAhorroDB].[dbo].[CA_Movimiento] C ORDER BY Id DESC);
SET @FK_TipoGestion = (SELECT FK_TipoGestion FROM dbo.FileMovimientos fm WHERE ID = @counter)
-- Insert Gestion
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Gestion]
(FK_Movimiento,FK_TipoGestion,Descripcion)
VALUES
(@FK_Movimiento,@FK_TipoGestion,'Movimiento Gestion')
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoReal = SaldoReal+fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento Gestion(Credito).'
END
ELSE IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimiento]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimiento.Nombre = 'Debito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Movimiento]
(FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, FechaHora,Monto)
SELECT FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, Fecha, Monto
FROM dbo.FileMovimientos fm
WHERE ID = @counter
SET @FK_Movimiento = 0;
SET @FK_TipoGestion = 0;
SET @FK_Movimiento = (SELECT TOP 1 Id FROM [CuentasAhorroDB].[dbo].[CA_Movimiento] C ORDER BY Id DESC);
SET @FK_TipoGestion = (SELECT FK_TipoGestion FROM dbo.FileMovimientos fm WHERE ID = @counter)
-- Insert Gestion
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Gestion]
(FK_Movimiento,FK_TipoGestion,Descripcion)
VALUES
(@FK_Movimiento,@FK_TipoGestion,'Movimiento Gestion')
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoReal = SaldoReal-fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento Gestion(Debito).'
END
END
ELSE IF @TipoOperacion = 'Movimiento' -- Movimiento
BEGIN
-- Declaracion de tipos
SET @FK_TipoMovimiento = 0
SET @FK_TipoMovimiento = (SELECT FK_TipoMovimiento FROM dbo.FileMovimientos fm WHERE ID = @counter);
IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimiento]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimiento.Nombre = 'Credito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Movimiento]
(FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, FechaHora,Monto)
SELECT FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, Fecha, Monto
FROM dbo.FileMovimientos fm
WHERE ID = @counter
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoReal = SaldoReal+fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento(Credito).'
END
ELSE IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimiento]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimiento.Nombre = 'Debito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Movimiento]
(FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, FechaHora,Monto)
SELECT FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, Fecha, Monto
FROM dbo.FileMovimientos fm
WHERE ID = @counter
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoReal = SaldoReal-fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento(Debito).'
END
END
PRINT @counter
SET @counter = @counter + 1;
END
IF @@TRANCOUNT > 0
COMMIT TRANSACTION; -- Commit transaction
PRINT 'Commit transaction.';
RETURN 1;
END TRY
BEGIN CATCH --ERROR in the transaction
EXEC MG_SP_GetErrorInfo;
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION; -- ROLLBACK of trasaction
PRINT 'Error: Rolling back transaction.';
RETURN @@ERROR*-1;
END CATCH;
END
GO
Horas Trabajadas: 3.5 hora
Autor: Edward Ovares Villegas
jueves, 23 de octubre de 2014
Migración de datos inicio
Migración de datos inicio
Migración de los datos generales de la base de datos.
Estos se van leyendo desde una tabla en migración para la base de datos principal y todos en un mismo tiempo.
Horas Trabajadas: 3.5 hora
Autor: Edward Ovares Villegas
Migración de los datos generales de la base de datos.
Estos se van leyendo desde una tabla en migración para la base de datos principal y todos en un mismo tiempo.
-----------------------------------------------------------------------------------------------------------------------
-- Verifica si el procedure existe, para eliminarla
IF OBJECT_ID ( N'MG_SP_MIGRAR_DATOS_GENERALES', N'P' ) IS NOT NULL
DROP PROCEDURE MG_SP_MIGRAR_DATOS_GENERALES;
GO
-- Create procedure for read file
CREATE PROCEDURE [dbo].[MG_SP_MIGRAR_DATOS_GENERALES]
AS
BEGIN
BEGIN TRY
-- Declaracion de variables del procedure
DECLARE @counter int,@max int; -- Contador del while y max
DECLARE @TipoOperacion nvarchar(255);
-----------------------------------------------------------------------------------------
-- INICIO DATOS GENERALES
-- Set de datos
DECLARE @Nombre varchar(50)
SET @counter = 1;
SET @max = (SELECT COUNT(*) FROM dbo.FileDatosGenerales fdg)+1;
BEGIN TRANSACTION
--Inicio del ciclo de while
WHILE @counter < @max
BEGIN
-- Busca el tipo de operacion a ejecutar
SET @TipoOperacion = (SELECT d.TipoOperacion FROM dbo.FileDatosGenerales d WHERE d.ID = @counter);
-- Inicio del IF
IF @TipoOperacion = 'InsercionTipoCuenta' -- Insercion Tipo Cuenta
BEGIN
-- Declaracion de tipos
SET @Nombre = NULL
SET @Nombre = (SELECT Nombre FROM dbo.FileDatosGenerales fdg WHERE ID = @counter);
-- Condicion para el Insert de Tipo de Cuenta
IF NOT EXISTS(SELECT 1 FROM [CuentasAhorroDB].[dbo].[CA_TipoCuenta] tc WHERE tc.Nombre = @Nombre)
BEGIN
INSERT INTO [CuentasAhorroDB].[dbo].[CA_TipoCuenta]
(Nombre,Moneda,SaldoMinimoMensual,TasaInteresAnual,MultaSaldoNegativo, MultaSaldoMinimo)
SELECT Nombre,'Colon',SaldoMinimo,TasaAnual,MultaSaldoNegativo, MultaSaldoMinimo FROM FileDatosGenerales dg
WHERE dg.ID = @counter;
PRINT 'insercion tipo cuenta.';
END
END
ELSE IF @TipoOperacion = 'InsercionTipoMovimientoInteres' -- Insercion Tipo Movimiento Interes
BEGIN
-- Declaracion de tipos
SET @Nombre = NULL
SET @Nombre = (SELECT Nombre FROM dbo.FileDatosGenerales fdg WHERE ID = @counter);
-- Condicion para el Insert de Tipo Movimiento Interes
IF NOT EXISTS(SELECT 1 FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimientoInteres] tc WHERE tc.Nombre = @Nombre)
BEGIN
INSERT INTO [CuentasAhorroDB].[dbo].[CA_TipoMovimientoInteres]
(Nombre)
SELECT Nombre FROM dbo.FileDatosGenerales fdg
WHERE fdg.ID = @counter;
PRINT 'insercion tipo movimiento interes.';
END
END
ELSE IF @TipoOperacion = 'InsercionTipoMovimientoPedientes' -- Insercion Tipo Movimiento Pedientes
BEGIN
-- Declaracion de tipos
SET @Nombre = NULL
SET @Nombre = (SELECT Nombre FROM dbo.FileDatosGenerales fdg WHERE ID = @counter);
-- Condicion para el Insert de Tipo Movimiento Pendiente
IF NOT EXISTS(SELECT 1 FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimientoPendiente] tc WHERE tc.Nombre = @Nombre)
BEGIN
INSERT INTO [CuentasAhorroDB].[dbo].[CA_TipoMovimientoPendiente]
(Nombre)
SELECT Nombre FROM dbo.FileDatosGenerales fdg
WHERE fdg.ID = @counter;
PRINT 'insercion tipo movimiento pendientes.';
END
END
ELSE IF @TipoOperacion = 'InsercionTipoMovimiento' -- Insercion Tipo Movimiento
BEGIN
-- Declaracion de tipos
SET @Nombre = NULL
SET @Nombre = (SELECT Nombre FROM dbo.FileDatosGenerales fdg WHERE ID = @counter);
-- Condicion para el Insert de Tipo Movimiento
IF NOT EXISTS(SELECT 1 FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimiento] tc WHERE tc.Nombre = @Nombre)
BEGIN
INSERT INTO [CuentasAhorroDB].[dbo].[CA_TipoMovimiento]
(Nombre)
SELECT Nombre FROM dbo.FileDatosGenerales fdg
WHERE fdg.ID = @counter;
PRINT 'insercion tipo movimiento.';
END
END
ELSE IF @TipoOperacion = 'InsercionTipoMedioMovimientos' -- Insercion Tipo Medio Movimientos
BEGIN
-- Declaracion de tipos
SET @Nombre = NULL
SET @Nombre = (SELECT Nombre FROM dbo.FileDatosGenerales fdg WHERE ID = @counter);
-- Condicion para el Insert de Tipo Medio Movimiento
IF NOT EXISTS(SELECT 1 FROM [CuentasAhorroDB].[dbo].[CA_TipoMedio] tc WHERE tc.Nombre = @Nombre)
BEGIN
INSERT INTO [CuentasAhorroDB].[dbo].[CA_TipoMedio]
(Nombre)
SELECT Nombre FROM dbo.FileDatosGenerales fdg
WHERE fdg.ID = @counter;
PRINT 'insercion tipo medio movimientos.';
END
END
ELSE IF @TipoOperacion = 'InsercionTipoGestion' -- Insercion Tipo Gestion
BEGIN
-- Declaracion de tipos
SET @Nombre = NULL
SET @Nombre = (SELECT Nombre FROM dbo.FileDatosGenerales fdg WHERE ID = @counter);
-- Condicion para el Insert de Tipo Gestion
IF NOT EXISTS(SELECT 1 FROM [CuentasAhorroDB].[dbo].[CA_TipoGestion] tc WHERE tc.Nombre = @Nombre)
BEGIN
INSERT INTO [CuentasAhorroDB].[dbo].[CA_TipoGestion]
(Nombre,Comision)
SELECT Nombre,Comision FROM dbo.FileDatosGenerales fdg
WHERE fdg.ID = @counter;
PRINT 'insercion tipo gestion.';
END
END
ELSE IF @TipoOperacion = 'InsercionBanco' -- Insercion Banco
BEGIN
-- Declaracion de tipos
SET @Nombre = NULL
SET @Nombre = (SELECT Nombre FROM dbo.FileDatosGenerales fdg WHERE ID = @counter);
-- Condicion para el Insert de Tipo Gestion
IF NOT EXISTS(SELECT 1 FROM [CuentasAhorroDB].[dbo].[CA_Banco] tc WHERE tc.Nombre = @Nombre)
BEGIN
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Banco]
(Nombre,Comision)
SELECT Nombre,Comision FROM dbo.FileDatosGenerales fdg
WHERE fdg.ID = @counter;
PRINT 'insercion banco.';
END
END
ELSE IF @TipoOperacion = 'InsercionCliente' -- Insercion Cliente
BEGIN
-- Declaracion de tipos
DECLARE @Usuario varchar(50)
SET @Usuario = (SELECT Usuario FROM dbo.FileDatosGenerales fdg WHERE ID = @counter);
-- Condicion para el Insert de Tipo Gestion
IF NOT EXISTS(SELECT 1 FROM [CuentasAhorroDB].[dbo].[CA_Cliente] tc WHERE tc.Usuario = @Usuario)
BEGIN
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Cliente]
(Nombre,Usuario,Contraseña)
SELECT Nombre,Usuario,Contraseña FROM dbo.FileDatosGenerales fdg
WHERE fdg.ID = @counter;
PRINT 'insercion cliente.';
END
END
SET @counter = @counter + 1;
END
IF @@TRANCOUNT > 0
COMMIT TRANSACTION; -- Commit transaction
PRINT 'Commit transaction.';
RETURN 1;
END TRY
BEGIN CATCH --ERROR in the transaction
EXEC MG_SP_GetErrorInfo;
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION; -- ROLLBACK of trasaction
PRINT 'Error: Rolling back transaction.';
RETURN @@ERROR*-1;
END CATCH;
END
GO
Horas Trabajadas: 3.5 hora
Autor: Edward Ovares Villegas
lunes, 20 de octubre de 2014
Fin de la Lectura de archivos
Se termino la lectura de los archivos txt y de los archivos json. Para poder leer estos ultimos se uso una libreria externa para poder efectuar la lectura de los datos, teniendo complicaciones como lo son cierta incompatibilidad de tipos de datos.
Horas Trabajadas: 0.5 hora
Autor: Edward Ovares Villegas
Horas Trabajadas: 0.5 hora
Autor: Edward Ovares Villegas
domingo, 19 de octubre de 2014
Lectura del Archivo json Movimientos
Lectura del Archivo json Movimientos
Para la lectura del archivo de movimientos.json se uso el mismo que cuentas.
Dentro de los errores mas complicado fue el de pasar de nvarchar(MAX) a DATE.
Horas Trabajadas: 1.5 hora
Autor: Edward Ovares Villegas
Para la lectura del archivo de movimientos.json se uso el mismo que cuentas.
Dentro de los errores mas complicado fue el de pasar de nvarchar(MAX) a DATE.
-----------------------------------------------------------------------------------------------------------------------
-- Verifica si el procedure existe, para eliminarla
IF OBJECT_ID ( N'MG_SP_LEER_MOVIMIENTOS', N'P' ) IS NOT NULL
DROP PROCEDURE MG_SP_LEER_MOVIMIENTOS;
GO
-- Create procedure for read file
CREATE PROCEDURE [dbo].[MG_SP_LEER_MOVIMIENTOS]
AS
BEGIN
BEGIN TRY
-- Declaracion de variables
DECLARE @XML xml
DECLARE @handle INT
DECLARE @PrepareXmlStatus INT
DECLARE @MyHierarchy Hierarchy
DECLARE @file NVARCHAR(MAX)
-- Creacion de la tablas temporales
CREATE TABLE #temp_aux(
dato NVARCHAR(MAX) NOT NULL
);
CREATE TABLE #temp_files(
TipoOperacion NVARCHAR(MAX),
FK_TipoMovimiento INT,
FK_Cuenta INT,
FK_TipoMedio NVARCHAR(MAX),
Fecha NVARCHAR(MAX),
Monto MONEY,
FK_TipoGestion NVARCHAR(MAX),
FK_Banco NVARCHAR(MAX)
);
BEGIN TRANSACTION
-- Insert del archivo en la tabla temporal
BULK INSERT #temp_aux
FROM 'C:\Users\Edward\SkyDrive\SQL\Proyecto_2_2014\movimientos.json';
SET @file = (SELECT * FROM #temp_aux ta)
INSERT INTO @MyHierarchy
SELECT * FROM parseJSON(@file);
--SELECT dbo.ToXML(@MyHierarchy)
SELECT @XML=dbo.ToXML(@MyHierarchy)
--SELECT @XML
EXEC @PrepareXmlStatus= sp_xml_preparedocument @handle OUTPUT, @XML
--Execute a SELECT statement using OPENXML.
INSERT #temp_files
SELECT *
FROM OPENXML (@handle, '/root/item')
WITH
(
TipoOperacion NVARCHAR(MAX) '@TipoOperacion',
FK_TipoMovimiento NVARCHAR(MAX) '@FK_TipoMovimiento',
FK_Cuenta NVARCHAR(MAX) '@FK_Cuenta',
FK_TipoMedio NVARCHAR(MAX) '@FK_TipoMedio',
Fecha NVARCHAR(MAX) '@Fecha',
Monto NVARCHAR(MAX) '@Monto',
FK_TipoGestion NVARCHAR(MAX) '@FK_TipoGestion',
FK_Banco NVARCHAR(MAX) '@FK_Banco'
);
-- Insert Movimientos
INSERT dbo.FileMovimientos
(TipoOperacion,FK_TipoMovimiento,FK_Cuenta,FK_TipoMedio,Fecha,Monto,FK_TipoGestion,FK_Banco)
SELECT TipoOperacion, FK_TipoMovimiento, FK_Cuenta, FK_TipoMedio, (SELECT CONVERT(datetime, Fecha, 103)), Monto, FK_TipoGestion, FK_Banco
FROM #temp_files tf
EXEC sp_xml_removedocument @handle
-- Delete table
DROP TABLE #temp_aux
DROP TABLE #temp_files
SELECT * FROM dbo.FileMovimientos fm
IF @@TRANCOUNT > 0
COMMIT TRANSACTION; -- Commit transaction
PRINT 'Commit transaction.';
RETURN 1;
END TRY
BEGIN CATCH --ERROR in the transaction
EXEC MG_SP_GetErrorInfo;
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION; -- ROLLBACK of trasaction
PRINT 'Error: Rolling back transaction.';
RETURN @@ERROR*-1;
END CATCH;
END
GO
Horas Trabajadas: 1.5 hora
Autor: Edward Ovares Villegas
jueves, 16 de octubre de 2014
Lectura del Archivo json cuentas
Lectura del Archivo json cuentas
Investigación y elaboración de la lectura de Json
Para realizar este procedure se uso una librería externa [2], la cual lee un .json y lo convierte a un formato xml.
Errores:
1- Problema al usar tipos definidos por usuario.
2- Bug de SQL Server al digitar código.
3- Error con los datos y las tablas temporales a la hora de hacer INSERT.
Referencias
[1] http://www.mssqltips.com/sqlservertip/2899/importing-and-processing-data-from-xml-files-into-sql-server-tables/'
[2] https://www.simple-talk.com/sql/t-sql-programming/producing-json-documents-from-sql-server-queries-via-tsql/
Horas Trabajadas: 4.5 hora
Autor: Edward Ovares Villegas
Investigación y elaboración de la lectura de Json
Para realizar este procedure se uso una librería externa [2], la cual lee un .json y lo convierte a un formato xml.
Errores:
1- Problema al usar tipos definidos por usuario.
2- Bug de SQL Server al digitar código.
3- Error con los datos y las tablas temporales a la hora de hacer INSERT.
-----------------------------------------------------------------------------------------------------------------------
-- Verifica si el procedure existe, para eliminarla
IF OBJECT_ID ( N'MG_SP_LEER_CUENTAS', N'P' ) IS NOT NULL
DROP PROCEDURE MG_SP_LEER_CUENTAS;
GO
-- Create procedure for read file
CREATE PROCEDURE [dbo].MG_SP_LEER_CUENTAS
AS
BEGIN
BEGIN TRY
-- Declaracion de variables
DECLARE @XML xml
DECLARE @handle INT
DECLARE @PrepareXmlStatus INT
DECLARE @MyHierarchy Hierarchy
DECLARE @file NVARCHAR(MAX)
-- Creacion de la tablas temporales
CREATE TABLE #temp_aux(
dato NVARCHAR(MAX) NOT NULL
);
CREATE TABLE #temp_file(
FK_Cliente INT,
FK_TipoCuenta INT,
SaldoReal MONEY,
SaldoPendiente MONEY,
SaldoIntereses MONEY,
fechaEstadoCuenta DATE
);
BEGIN TRANSACTION -- Start TRANSACTION
-- Insert del archivo en la tabla temporal
BULK INSERT #temp_aux
FROM 'C:\Users\Edward\SkyDrive\SQL\Proyecto_2_2014\cuentas.json';
SET @file = (SELECT * FROM #temp_aux ta)
INSERT INTO @MyHierarchy
SELECT * FROM parseJSON(@file);
--SELECT dbo.ToXML(@MyHierarchy)
SELECT @XML=dbo.ToXML(@MyHierarchy)
--SELECT @XML
EXEC @PrepareXmlStatus= sp_xml_preparedocument @handle OUTPUT, @XML
--Execute a SELECT statement using OPENXML.
INSERT #temp_file
SELECT *
FROM OPENXML (@handle, '/root/item')
WITH
(
FK_Cliente NVARCHAR(MAX) '@FK_Cliente',
FK_TipoCuenta NVARCHAR(MAX) '@FK_TipoCuenta',
SaldoReal NVARCHAR(MAX) '@SaldoReal',
SaldoPendiente NVARCHAR(MAX) '@SaldoPendiente',
SaldoIntereses NVARCHAR(MAX) '@SaldoIntereses',
fechaEstadoCuenta NVARCHAR(MAX) '@fechaEstadoCuenta'
)
-- INSERT IN FILE CUENTA
INSERT dbo.FileCuenta
(FK_Cliente,FK_TipoCuenta,SaldoReal,SaldoPendiente,SaldoIntereses,fechaEstadoCuenta)
SELECT * FROM #temp_file
ORDER BY fechaEstadoCuenta ASC
SELECT * FROM dbo.FileCuenta fc
EXEC sp_xml_removedocument @handle
DROP TABLE #temp_aux
DROP TABLE #temp_file
IF @@TRANCOUNT > 0
COMMIT TRANSACTION; -- Commit transaction
PRINT 'Commit transaction.';
RETURN 1;
END TRY
BEGIN CATCH --ERROR in the transaction
EXEC MG_SP_GetErrorInfo;
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION; -- ROLLBACK of trasaction
PRINT 'Error: Rolling back transaction.';
RETURN @@ERROR*-1;
END CATCH;
END
GO
Referencias
[1] http://www.mssqltips.com/sqlservertip/2899/importing-and-processing-data-from-xml-files-into-sql-server-tables/'
[2] https://www.simple-talk.com/sql/t-sql-programming/producing-json-documents-from-sql-server-queries-via-tsql/
Horas Trabajadas: 4.5 hora
Autor: Edward Ovares Villegas
miércoles, 15 de octubre de 2014
Lectura del archivo TXT
Lectura del archivo TXT
Creación deprocedure de lectura del archivo DatosGenerales.txt, para la migración de datos.
Errores:
1- En la edición del código para la lectura del archivo se tuvieron errores con el ID ya que el archivo no incluye estas. Y a la hora de que el BULK intentaba insertar no los agregaba y daba un error, ya que la tabla tenia un ID INT IDENTITY(1,1).
Solución: para resolver el error 1 se creo un tabla temporal sin ID y Primary Key. Se uso tablas temporales ya que tablas variables daban un error desconocido.
Referencias:
http://stackoverflow.com/questions/2007857/reading-a-text-file-with-sql-server
http://www.codeproject.com/Tips/775961/Import-CSV-or-txt-File-Into-SQL-Server-Using-Bulk
http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file
Horas Trabajadas: 2.5 hora
Autor: Edward Ovares Villegas
Creación deprocedure de lectura del archivo DatosGenerales.txt, para la migración de datos.
Errores:
1- En la edición del código para la lectura del archivo se tuvieron errores con el ID ya que el archivo no incluye estas. Y a la hora de que el BULK intentaba insertar no los agregaba y daba un error, ya que la tabla tenia un ID INT IDENTITY(1,1).
Solución: para resolver el error 1 se creo un tabla temporal sin ID y Primary Key. Se uso tablas temporales ya que tablas variables daban un error desconocido.
-----------------------------------------------------------------------------------------------------------------------
-- Verifica si el procedure existe, para eliminarla
IF OBJECT_ID ( N'MG_SP_LEER_DATOS_GENERALES', N'P' ) IS NOT NULL
DROP PROCEDURE MG_SP_LEER_DATOS_GENERALES;
GO
-- Create procedure for read file
CREATE PROCEDURE MG_SP_LEER_DATOS_GENERALES
AS
BEGIN
-- Creacion de una tabla temporal para los datos generales
CREATE TABLE #temp_aux(
TipoOperacion NVARCHAR(MAX) NOT NULL,
Nombre NVARCHAR(MAX) NOT NULL,
Comision NVARCHAR(MAX) NOT NULL,
TasaAnual NVARCHAR(MAX) NOT NULL,
SaldoMinimo NVARCHAR(MAX) NOT NULL,
MultaSaldoMinimo NVARCHAR(MAX) NOT NULL,
MultaSaldoNegativo NVARCHAR(MAX) NOT NULL,
Usuario NVARCHAR(MAX) NOT NULL,
Contraseña NVARCHAR(MAX) NOT NULL
);
-- Lectura del archivo txt
BULK INSERT #temp_aux
FROM 'C:\Users\Edward\SkyDrive\SQL\Proyecto_2_2014\DatosGenerales.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
-- Insert de los datos de la tabla temp a la de FileDatosGenerales de migracion
INSERT dbo.FileDatosGenerales
(
TipoOperacion,
Nombre,
Comision,
TasaAnual,
SaldoMinimo,
MultaSaldoMinimo,
MultaSaldoNegativo,
Usuario,
Contraseña
)SELECT TipoOperacion,
Nombre,
Comision,
TasaAnual,
SaldoMinimo,
MultaSaldoMinimo,
MultaSaldoNegativo,
Usuario,
Contraseña FROM #temp_aux;
-- Elimina #temp_aux
DROP TABLE #temp_aux
END
GO
Referencias:
http://stackoverflow.com/questions/2007857/reading-a-text-file-with-sql-server
http://www.codeproject.com/Tips/775961/Import-CSV-or-txt-File-Into-SQL-Server-Using-Bulk
http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file
Horas Trabajadas: 2.5 hora
Autor: Edward Ovares Villegas
lunes, 13 de octubre de 2014
Creación generador de la base de datos(Script de creación)
Creación generador de la base de datos(Script de creación)
Se realizo el generador de la base de datos(Script de creación).
En el cual se detectaron unos errores de tipos de datos como lo son:
* Tratar money como int
* Fue el de guardar un date como un varchar.
Horas Trabajadas: 2.5 horas
Autor: Edward Ovares Villegas
Se realizo el generador de la base de datos(Script de creación).
En el cual se detectaron unos errores de tipos de datos como lo son:
* Tratar money como int
* Fue el de guardar un date como un varchar.
USE master
GO
-----------------------------------------------------------------------------------------------------------------------
IF EXISTS(select * from sys.databases where name='CuentasAhorroDB')
BEGIN
ALTER DATABASE [CuentasAhorroDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE [CuentasAhorroDB]
END
GO
CREATE DATABASE [CuentasAhorroDB]
GO
USE [CuentasAhorroDB]
GO
-----------------------------------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[CA_TipoGestion](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [varchar](50) NOT NULL,
[Comision] [money] NOT NULL,
PRIMARY KEY(ID)
)
-----------------------------------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[CA_TipoMedio](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [varchar](50) NOT NULL,
PRIMARY KEY(ID)
)
-----------------------------------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[CA_TipoMovimiento](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [varchar](50) NOT NULL,
PRIMARY KEY(ID)
)
-----------------------------------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[CA_TipoMovimientoInteres](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [varchar](50) NOT NULL,
PRIMARY KEY(ID)
)
-----------------------------------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[CA_TipoMovimientoPendiente](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [varchar](50) NOT NULL,
PRIMARY KEY(ID)
)
-----------------------------------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[CA_TipoCuenta](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [varchar](50) NOT NULL,
[Moneda] [varchar](30) NOT NULL,
[SaldoMinimoMensual] [money] NOT NULL,
[TasaInteresAnual] [float] NOT NULL,
[MultaSaldoNegativo] [money] NOT NULL,
[MultaSaldoMinimo] [money] NOT NULL,
PRIMARY KEY(ID)
)
-----------------------------------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[CA_Banco](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [varchar](50) NOT NULL,
[Comision] [money] NOT NULL,
PRIMARY KEY(ID)
)
-----------------------------------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[CA_Cliente](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [varchar](50) NOT NULL,
[Usuario] [varchar](50) NOT NULL,
[Contraseña] [varchar](50) NOT NULL,
PRIMARY KEY(ID)
)
-----------------------------------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[CA_Cuenta](
[Id] [int] IDENTITY(1,1) NOT NULL,
[FK_TipoCuenta] [int] FOREIGN KEY REFERENCES [CA_TipoCuenta](ID) NOT NULL,
[FK_Cliente] [int] FOREIGN KEY REFERENCES [CA_Cliente](ID) NOT NULL,
[SaldoReal] [money] NOT NULL,
[SaldoPendiente] [money] NOT NULL,
[SaldoIntereses] [money] NOT NULL,
[FechaEstadoCuenta] [date] NOT NULL,
PRIMARY KEY(ID)
)
-----------------------------------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[CA_EstadoCuenta](
[Id] [int] IDENTITY(1,1) NOT NULL,
[FK_Cuenta] [int] FOREIGN KEY REFERENCES [CA_Cuenta](ID) NOT NULL,
[Fecha] [date] NOT NULL,
[SaldoTotal] [money] NOT NULL,
[InteresAcum] [money] NOT NULL,
[SaldoTenP] [money] NOT NULL,
[QRetiros] [int] NOT NULL,
[TotalRetiros] [money] NOT NULL,
[QMulta] [int] NOT NULL,
[TotalMultas] [money] NOT NULL,
[QDepositos] [int] NOT NULL,
[TotalDepositos] [money] NOT NULL,
[QGestiones] [int] NOT NULL,
[TotalGestiones] [money] NOT NULL,
PRIMARY KEY(ID)
)
-----------------------------------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[CA_SaldoDiario](
[Id] [int] IDENTITY(1,1) NOT NULL,
[FK_Cuenta] [int] FOREIGN KEY REFERENCES [CA_Cuenta](ID) NOT NULL,
[Fecha] [datetime] NOT NULL,
[Saldo] [money] NOT NULL,
PRIMARY KEY(ID)
)
-----------------------------------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[CA_Movimiento](
[Id] [int] IDENTITY(1,1) NOT NULL,
[FK_Cuenta] [int] FOREIGN KEY REFERENCES [CA_Cuenta](ID) NOT NULL,
[FK_TipoMovimiento] [int] FOREIGN KEY REFERENCES [CA_TipoMovimiento](ID) NOT NULL,
[FK_TipoMedio] [int] FOREIGN KEY REFERENCES [CA_TipoMedio](ID) NOT NULL,
[FechaHora] [datetime] NOT NULL,
[Monto] [money] NOT NULL,
PRIMARY KEY(ID)
)
-----------------------------------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[CA_MovCajeroAut](
[Id] [int] IDENTITY(1,1) NOT NULL,
[FK_Banco] [int] FOREIGN KEY REFERENCES [CA_Banco](ID) NOT NULL,
[FK_Movimiento] [int] FOREIGN KEY REFERENCES [CA_Movimiento](ID) NOT NULL,
PRIMARY KEY(ID)
)
-----------------------------------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[CA_MovimientoPendiente](
[Id] [int] IDENTITY(1,1) NOT NULL,
[FK_Cuenta] [int] FOREIGN KEY REFERENCES [CA_Cuenta](ID) NOT NULL,
[FK_TipoMovimientoPendiente] [int] FOREIGN KEY REFERENCES [CA_TipoMovimientoPendiente](ID) NOT NULL,
[Monto] [money] NOT NULL,
[FechaHora] [datetime] NOT NULL,
PRIMARY KEY(ID)
)
-----------------------------------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[CA_MovimientosIntereses](
[Id] [int] IDENTITY(1,1) NOT NULL,
[FK_Cuenta] [int] FOREIGN KEY REFERENCES [CA_Cuenta](ID) NOT NULL,
[FK_TipoMovimientoInteres][int] FOREIGN KEY REFERENCES [CA_TipoMovimientoInteres](ID) NOT NULL,
[Fecha] [datetime] NOT NULL,
[Monto] [money] NOT NULL,
PRIMARY KEY(ID)
)
-----------------------------------------------------------------------------------------------------------------------
CREATE TABLE [dbo].[CA_Gestion](
[Id] [int] IDENTITY(1,1) NOT NULL,
[FK_Movimiento] [int] FOREIGN KEY REFERENCES [CA_Movimiento](ID) NOT NULL,
[FK_TipoGestion] [int] FOREIGN KEY REFERENCES [CA_TipoGestion](ID) NOT NULL,
[Descripcion] [varchar](50) NOT NULL,
PRIMARY KEY(ID)
)
Horas Trabajadas: 2.5 horas
Autor: Edward Ovares Villegas
sábado, 11 de octubre de 2014
Creación del Diagrama de la Base de Datos
Creación del Diagrama de la Base de Datos
Se creo el modelo físico, basándonos en el modelo conceptual dado por el profesor en clase. Se trabajo el modelo por partes. Luego de terminar el modelo físico se auto-generó el código de las tablas usadas en la base.
Dentro la realización del diagrama físico se tuvieron problemas con la compresión del modelo lógico, principalmente en las tablas de: [Gestion] y [MovBanco].
Horas Trabajadas: 3 hora
Autor: Edward Ovares Villegas
Se creo el modelo físico, basándonos en el modelo conceptual dado por el profesor en clase. Se trabajo el modelo por partes. Luego de terminar el modelo físico se auto-generó el código de las tablas usadas en la base.
Dentro la realización del diagrama físico se tuvieron problemas con la compresión del modelo lógico, principalmente en las tablas de: [Gestion] y [MovBanco].
Horas Trabajadas: 3 hora
Autor: Edward Ovares Villegas
Suscribirse a:
Comentarios (Atom)
