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

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.



-----------------------------------------------------------------------------------------------------------------------

-- 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.




-----------------------------------------------------------------------------------------------------------------------

-- 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.


-----------------------------------------------------------------------------------------------------------------------
-- 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.




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