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