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


No hay comentarios:

Publicar un comentario