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