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

No hay comentarios:

Publicar un comentario