Se realizo el Stored Procedure del interés diario el cual fue prácticamente copiar y pegar del examen ya que Vinicio tuvo una nota perfecta en esta parte simplemente se le hicieron algunos ajustes para que fuera mas eficiente y para que funcionara con las nuevas especificaciones del profesor:
create PROCEDURE [dbo].[SMSP_DailyInterest]
-- Add the parameters for the stored procedure here
@ProcDate DATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
BEGIN TRY
DECLARE @DailyInterests TABLE (ID INT PRIMARY KEY IDENTITY(1,1), FK_SavingsAccount INT NOT NULL, Amount MONEY);
DECLARE @PunishedAccounts TABLE(ID INT PRIMARY KEY IDENTITY(1,1),FK_SavingsAccount INT NOT NULL, MinBalanceByMonth MONEY, PenaltyFee MONEY);
INSERT INTO @DailyInterests(FK_SavingsAccount,Amount)
SELECT dbo.SMFN_CalculateInterest(SA.Balance, SAT.Interest_Rate),SA.Balance FROM SavingsAccount SA INNER JOIN SavingsAccountType SAT ON SAT.ID = SA.Fk_SavingAccountType
UPDATE SavingsAccount SET Balance = SA.MinBalance FROM SavingsAccount SA INNER JOIN MinBalanceByMonth MBPM ON SA.ID = MBPM.FK_SavingAccount
WHERE SA.Balance < MBPM.MinBalance
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
IF @ProcDate = dbo.SMFN_Deadline()
BEGIN
INSERT INTO BalanceMov(FK_SavingAccount,FK_MovType,Date,Amount)
SELECT SA.ID,0,@ProcDate,SA.MounthAccountInterest FROM SavingsAccount SA
UPDATE SavingsAccount SET Balance = Balance + SA.MounthAccountInterest
FROM SavingsAccount SA INNER JOIN BalanceMov BM ON SA.ID = BM.FK_SavingAccount
INSERT INTO InterestMov(FK_SavingAccount,FK_InterestMovType,Date,Amount)
SELECT SA.ID, 1, @ProcDate, SA.MounthAccountInterest FROM SavingsAccount SA
UPDATE SavingsAccount SET MounthAccountInterest = 0 FROM SavingsAccount SA
INNER JOIN InterestMov IM ON SA.ID = IM.FK_SavingAccount
INSERT INTO @PunishedAccounts(FK_SavingsAccount,MinBalanceByMonth,PenaltyFee)
SELECT SA.ID, MBM.MinBalance, SAT.MB_PunishAmount
FROM SavingsAccount SA
INNER JOIN MinBalanceByMonth MBM ON SA.ID = MBM.FK_SavingAccount
INNER JOIN SavingsAccountType SAT ON SAT.ID = SA.Fk_SavingAccountType
WHERE MBM.MinBalance < SAT.MonthServiceCost
INSERT INTO BalanceMov(FK_SavingAccount, FK_MovType, Date, Amount)
SELECT PA.FK_SavingsAccount,1,@ProcDate,PA.PenaltyFee
FROM @PunishedAccounts PA
UPDATE SavingsAccount SET Balance = Balance - PA.PenaltyFee
FROM @PunishedAccounts PA INNER JOIN SavingsAccount S ON S.ID = PA.FK_SavingsAccount
INSERT INTO MinBalanceByMonth(FK_SavingAccount,YearMonth,MinBalance)
SELECT S.ID,@ProcDate,S.Balance
FROM SavingsAccount S
END
INSERT INTO InterestMov(FK_SavingAccount,FK_InterestMovType,Date,Amount)
SELECT DI.FK_SavingsAccount,0,@ProcDate,DI.Amount
FROM @DailyInterests DI
UPDATE SavingsAccount SET MounthAccountInterest = DI.Amount + MounthAccountInterest FROM SavingsAccount SA INNER JOIN @DailyInterests DI ON SA.ID = DI.FK_SavingsAccount
COMMIT
RETURN 1
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
RETURN 0
END CATCH
END
GO
Progra Final Save money
martes, 24 de noviembre de 2015
Migración no funciona bien
Se ha empezado hacer el Stored Procedure de migracion del .xml pero hay fallas en este ya que por alguna razón el sistema no esta haciendo bien los selects y sin esto no se podrá hacer bien el SP de migración de datos, este es la primera versión del Script de la base de datos:
Create PROCEDURE [dbo].[SMSP_MigrateData]
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
BEGIN TRY
EXEC dbo.SMSP_ClearMovementDebug
IF(EXISTS(SELECT 1 FROM dbo.MinBalanceByMonth))
DELETE FROM dbo.MinBalanceByMonth;
IF(EXISTS(SELECT 1 FROM dbo.BalanceMov))
DELETE FROM dbo.BalanceMov;
IF(EXISTS(SELECT 1 FROM dbo.SavingsAccount))
DELETE FROM dbo.SavingsAccount;
IF(EXISTS(SELECT 1 FROM dbo.SavingsAccountType))
DELETE FROM dbo.SavingsAccountType;
DECLARE @SavingsAccountType TABLE(ID INT NOT NULL,Name VARCHAR(35),Interest_Rate INT NOT NULL,MB_PunishAmount INT NOT NULL,MonthServiceCost INT NOT NULL);
DECLARE @BalanceMovType TABLE(ID INT NOT NULL,Name VARCHAR(50));
DECLARE @MinBalanceByMonth TABLE(ID INT PRIMARY KEY IDENTITY(1,1),FK_SavingAccount INT NOT NULL,YearMonth DATE, MinBalance INT);
DECLARE @BalanceMov TABLE(ID INT PRIMARY KEY IDENTITY(1,1),FK_SavingAccount INT NOT NULL,FK_MovType INT NOT NULL,FK_AccountStatus INT NOT NULL,Date DATE,Amount MONEY);
DECLARE @SavingsAccount TABLE(ID INT NOT NULL,FK_SAT INT NOT NULL,Balance INT NOT NULL,MonthAcumInterest INT NOT NULL,Deadline INT NOT NULL,MinBalance INT NOT NULL,ConstitutionDate DATE, Deleted BIT NOT NULL);
DECLARE @XML XML
SELECT @XML = BulkColumn
FROM OPENROWSET(BULK 'C:\XMLBases.xml', SINGLE_CLOB) AS x;
INSERT INTO @SavingsAccountType(ID,Name,Interest_Rate,MB_PunishAmount,MonthServiceCost)
SELECT tipo.value('@ID', 'VARCHAR(50)'),
tipo.value('@Nombre', 'VARCHAR(50)'),
tipo.value('@TazaInteres', 'VARCHAR(50)'),
tipo.value('@MontoMultaSM', 'VARCHAR(50)'),
tipo.value('@CostoServicioMes', 'VARCHAR(50)')
FROM @XML.nodes('/TipoAhorro') AS x1(tipo)
INSERT INTO @BalanceMovType(ID,Name)
SELECT tipo.value('@ID', 'VARCHAR(50)'),
tipo.value('@Nombre', 'VARCHAR(50)')
FROM @XML.nodes('/TipoMov') AS x2(tipo)
INSERT INTO @SavingsAccount(ID,FK_SAT,Balance,MonthAcumInterest,Deadline,MinBalance,ConstitutionDate,Deleted)
SELECT cuenta.value('@ID','VARCHAR(50)'),
cuenta.value('@TipoAhorro','VARCHAR(50)'),
cuenta.value('@Saldo','VARCHAR(50)'),
0,cuenta.value('@DiaCorte','VARCHAR(50)'),
cuenta.value('@SaldoMinimo','VARCHAR(50)'),
cuenta.value('@FechaConstitucion','VARCHAR(50)'),0
FROM @XML.nodes('/ROOT') AS x1(AR)
cross apply x1.AR.nodes('./Ahorro') AS x2(cuenta)
INSERT INTO @BalanceMov (FK_SavingAccount,FK_MovType,FK_AccountStatus,Date,Amount)
SELECT
mov.value('@CuentaAhorro', 'VARCHAR(50)'),
mov.value('@TipoMov','VARCHAR(50)'),
0,mov.value('@Fecha', 'VARCHAR(50)'),
mov.value('@Monto', 'VARCHAR(50)')
FROM @XML.nodes('/ROOT') AS x1(AR)
cross apply x1.AR.nodes('./MovSaldo') AS x2(mov)
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
INSERT INTO dbo.SavingsAccountType(ID,Name,Interest_Rate,MB_PunishAmount,MonthServiceCost)
SELECT BS.ID, BS.Name, BS.Interest_Rate, BS.MB_PunishAmount, BS.MonthServiceCost
FROM @SavingsAccountType BS
INSERT INTO dbo.BalanceMovType(ID,Name)
SELECT LT.ID, LT.Name
FROM @BalanceMovType LT
INSERT INTO dbo.SavingsAccount(ID,Fk_SavingAccountType,Balance,MounthAccountInterest,Deadline,MinBalance,constitutionDate,deleted)
SELECT D.ID,D.FK_SAT,D.Balance,D.MonthAcumInterest,D.Deadline,D.MinBalance,D.ConstitutionDate,D.Deleted
FROM @SavingsAccount D
INSERT INTO dbo.BalanceMov(ID,FK_SavingAccount,FK_MovType,FK_AccountStatus,Date,Amount)
SELECT B.ID,B.FK_SavingAccount,B.FK_MovType,B.FK_AccountStatus,B.Date,B.Amount
FROM @BalanceMov B
COMMIT
RETURN 1
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
PRINT 'Something went wrong!'
RETURN -1 * @@ERROR
END CATCH
END
GO
Create PROCEDURE [dbo].[SMSP_MigrateData]
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
BEGIN TRY
EXEC dbo.SMSP_ClearMovementDebug
IF(EXISTS(SELECT 1 FROM dbo.MinBalanceByMonth))
DELETE FROM dbo.MinBalanceByMonth;
IF(EXISTS(SELECT 1 FROM dbo.BalanceMov))
DELETE FROM dbo.BalanceMov;
IF(EXISTS(SELECT 1 FROM dbo.SavingsAccount))
DELETE FROM dbo.SavingsAccount;
IF(EXISTS(SELECT 1 FROM dbo.SavingsAccountType))
DELETE FROM dbo.SavingsAccountType;
DECLARE @SavingsAccountType TABLE(ID INT NOT NULL,Name VARCHAR(35),Interest_Rate INT NOT NULL,MB_PunishAmount INT NOT NULL,MonthServiceCost INT NOT NULL);
DECLARE @BalanceMovType TABLE(ID INT NOT NULL,Name VARCHAR(50));
DECLARE @MinBalanceByMonth TABLE(ID INT PRIMARY KEY IDENTITY(1,1),FK_SavingAccount INT NOT NULL,YearMonth DATE, MinBalance INT);
DECLARE @BalanceMov TABLE(ID INT PRIMARY KEY IDENTITY(1,1),FK_SavingAccount INT NOT NULL,FK_MovType INT NOT NULL,FK_AccountStatus INT NOT NULL,Date DATE,Amount MONEY);
DECLARE @SavingsAccount TABLE(ID INT NOT NULL,FK_SAT INT NOT NULL,Balance INT NOT NULL,MonthAcumInterest INT NOT NULL,Deadline INT NOT NULL,MinBalance INT NOT NULL,ConstitutionDate DATE, Deleted BIT NOT NULL);
DECLARE @XML XML
SELECT @XML = BulkColumn
FROM OPENROWSET(BULK 'C:\XMLBases.xml', SINGLE_CLOB) AS x;
INSERT INTO @SavingsAccountType(ID,Name,Interest_Rate,MB_PunishAmount,MonthServiceCost)
SELECT tipo.value('@ID', 'VARCHAR(50)'),
tipo.value('@Nombre', 'VARCHAR(50)'),
tipo.value('@TazaInteres', 'VARCHAR(50)'),
tipo.value('@MontoMultaSM', 'VARCHAR(50)'),
tipo.value('@CostoServicioMes', 'VARCHAR(50)')
FROM @XML.nodes('/TipoAhorro') AS x1(tipo)
INSERT INTO @BalanceMovType(ID,Name)
SELECT tipo.value('@ID', 'VARCHAR(50)'),
tipo.value('@Nombre', 'VARCHAR(50)')
FROM @XML.nodes('/TipoMov') AS x2(tipo)
INSERT INTO @SavingsAccount(ID,FK_SAT,Balance,MonthAcumInterest,Deadline,MinBalance,ConstitutionDate,Deleted)
SELECT cuenta.value('@ID','VARCHAR(50)'),
cuenta.value('@TipoAhorro','VARCHAR(50)'),
cuenta.value('@Saldo','VARCHAR(50)'),
0,cuenta.value('@DiaCorte','VARCHAR(50)'),
cuenta.value('@SaldoMinimo','VARCHAR(50)'),
cuenta.value('@FechaConstitucion','VARCHAR(50)'),0
FROM @XML.nodes('/ROOT') AS x1(AR)
cross apply x1.AR.nodes('./Ahorro') AS x2(cuenta)
INSERT INTO @BalanceMov (FK_SavingAccount,FK_MovType,FK_AccountStatus,Date,Amount)
SELECT
mov.value('@CuentaAhorro', 'VARCHAR(50)'),
mov.value('@TipoMov','VARCHAR(50)'),
0,mov.value('@Fecha', 'VARCHAR(50)'),
mov.value('@Monto', 'VARCHAR(50)')
FROM @XML.nodes('/ROOT') AS x1(AR)
cross apply x1.AR.nodes('./MovSaldo') AS x2(mov)
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
INSERT INTO dbo.SavingsAccountType(ID,Name,Interest_Rate,MB_PunishAmount,MonthServiceCost)
SELECT BS.ID, BS.Name, BS.Interest_Rate, BS.MB_PunishAmount, BS.MonthServiceCost
FROM @SavingsAccountType BS
INSERT INTO dbo.BalanceMovType(ID,Name)
SELECT LT.ID, LT.Name
FROM @BalanceMovType LT
INSERT INTO dbo.SavingsAccount(ID,Fk_SavingAccountType,Balance,MounthAccountInterest,Deadline,MinBalance,constitutionDate,deleted)
SELECT D.ID,D.FK_SAT,D.Balance,D.MonthAcumInterest,D.Deadline,D.MinBalance,D.ConstitutionDate,D.Deleted
FROM @SavingsAccount D
INSERT INTO dbo.BalanceMov(ID,FK_SavingAccount,FK_MovType,FK_AccountStatus,Date,Amount)
SELECT B.ID,B.FK_SavingAccount,B.FK_MovType,B.FK_AccountStatus,B.Date,B.Amount
FROM @BalanceMov B
COMMIT
RETURN 1
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
PRINT 'Something went wrong!'
RETURN -1 * @@ERROR
END CATCH
END
GO
Creacion de la base de datos en Sql server 2014
Se realizo la creación de las tablas de la base de datos en el sistema Sql server 2014 y este fue el resultado:
En esta tarea se duro 1 hora, no hubo tiempo de investigación ya que no se necesito
| Diagrama de base de datos física |
Existen problemas en el archivo .xml que debían realizar nuestros compañeros entonces empezamos a realizar nuestro propio .xml para adelantar trabajo.
Comienzo fuerte
La tercera tarea programada ya empezó y es muy simple compara a las demás, aunque no tenemos mucho tiempo para realizara, hemos empezado en crear la base de datos de datos
Aquí
el modelo "Conceptual" de la base de datos:
Actualmente se empezó con la realización de la base de datos en Sql server se usara el super user para mas comodidad.
Las tareas se han distribuido entre Vinicio y Guillermo de la siguiente manera:
Vinicio:
1) Creacion de la base de datos con el SP de migración del Xml, duración aproximada 3 horas.
2) Creacion del SP de interés diario, duración aproximada 2 horas.
Guillermo:
1) Creación y manejo del blog (agregar entradas, buscar información y mas), duración aproximada 3 horas.
2) Creación de las Tablas de la base de datos y la revisión del modelo, duración aproximada 1 horas.
3) Creación de los SP básicos (Inserts, Update, Deleted), duración aproximada 1 horas.
Aquí
el modelo "Conceptual" de la base de datos:
| Modelo hecho por el profesor en clases |
Las tareas se han distribuido entre Vinicio y Guillermo de la siguiente manera:
Vinicio:
1) Creacion de la base de datos con el SP de migración del Xml, duración aproximada 3 horas.
2) Creacion del SP de interés diario, duración aproximada 2 horas.
Guillermo:
1) Creación y manejo del blog (agregar entradas, buscar información y mas), duración aproximada 3 horas.
2) Creación de las Tablas de la base de datos y la revisión del modelo, duración aproximada 1 horas.
3) Creación de los SP básicos (Inserts, Update, Deleted), duración aproximada 1 horas.
Suscribirse a:
Comentarios (Atom)