Fecha: 02/09/2014
Hora de inicio: 6:00pm
Hora de Fin: 12:00 pm
Acciones:
Hora de Fin: 12:00 pm
Acciones:
-Se finalizo la creacion de los Archivos de prueba de la base de Datos y fueron publicados en el grupo de la clase (ver foto #1)
- Se actualizo el modelo de la base de datos agregando la tabla de Administradores , la Tabla de estados y algunos atributos adicionales que fueron necesarios (ver foto #2)- Se realizo un store procedure para leer el archivo de datos generales que inserta los datos de manera masiva y transaccional , en la seccion Codigo se adjunta el codigo del mismo.
Fotos:
#1
#2
Codigo:
USE [Planillas]
GO
/****** Object: StoredProcedure [dbo].[Llenado] Script Date: 03/09/2014 11:03:32 a.m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[Llenado]
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
--Declaracion de Variables
DECLARE @fileName varchar(255)
DECLARE @ExecCmd varchar(255)
DECLARE @y int
DECLARE @x int
DECLARE @fileContents varchar(MAX)
DECLARE @Xml xml
DECLARE @tempXML TABLE (PK INT NOT NULL IDENTITY(1,1),ThisLine varchar(255) NOT NULL)
DECLARE @DatosPrueba TABLE (TipoOperacion VARCHAR(50) NOT NULL, DatosEmpresa VARCHAR (100) NOT NULL, DatosPuestos VARCHAR(100) NOT NULL,
DatosDocId VARCHAR (50) NOT NULL, DatosValoresConfiguracion VARCHAR (100) NOT NULL, DatosTipoEmpleado VARCHAR(100) NOT NULL, DatosEmpleado VARCHAR(100) NOT NULL)
DECLARE @start INT, @end INT -- variables para hacer el split de las cadenas
--Set algunas variables
SET @fileName= 'C:\DatosGenerales.xml'
SET @ExecCmd= 'type '+@fileName
SET @fileContents= ''
INSERT INTO @tempXML EXEC MASTER.dbo.xp_cmdshell @ExecCmd;
SELECT @y= count(*) from @tempXML --Obtiene la cantidad de lineas del archivo
SET @x=0
while @x<>@y
BEGIN
SET @x=@x+1
SELECT @fileContents=@fileContents + ThisLine from @tempXML where PK=@x
END
SET @Xml= cast (@fileContents as XML)
INSERT INTO @DatosPrueba
SELECT
archivo.filas.value('TipoOperacion[1]','varchar(50)') AS TipoOperacion,
archivo.filas.value('DatosEmpresa[1]','varchar(100)') AS DatosEmpresa,
archivo.filas.value('DatosPuestos[1]','VARCHAR(100)') AS DatosPuestos,
archivo.filas.value('DatosDocId[1]','VARCHAR(50)') AS DatosDocId,
archivo.filas.value('DatosValoresConfiguracion[1]','VARCHAR(100)') AS DatosValoresConfiguracion,
archivo.filas.value('DatosTipoEmpleado[1]','VARCHAR(100)') AS DatosTipoEmpleado,
archivo.filas.value('DatosEmpleado[1]','VARCHAR(100)') AS DatosEmpleado
FROM @Xml.nodes('Archivo/Fila') AS archivo(filas);
--select * from @DatosPrueba
--Declaracion de tablas temporales para cada tabla a modificar--
DECLARE @empresas Table(ID int NOT NULL identity(1,1),Nombre varchar(50) NOT NULL, DiaDeCorte varchar(10) NOT NULL,
fechaCreacion date NOT NULL, UltimoCorte date NOT NULL,Activo bit NOT NULL)
DECLARE @TipoEmpleados Table(ID int NOT NULL identity(1,1),Nombre varchar(50) NOT NULL)
DECLARE @Puestos Table(ID int NOT NULL identity(1,1),Nombre varchar(50) NOT NULL,SalarioPorHora money NOT NULL)
DECLARE @TipoDocId Table(ID int NOT NULL identity(1,1),Nombre varchar(50) NOT NULL)
DECLARE @ValoresConfiguracion Table(ID int NOT NULL identity(1,1),Nombre varchar(50) NOT NULL,
Tipo varchar(10) NOT NULL,Valor varchar(20) NOT NULL)
DECLARE @Empleados Table(ID int NOT NULL identity(1,1),FK_TipoEmpleado int NOT NULL,FK_TipoDocId int NOT NULL,FK_Empresa INT NOT NULL,
FK_Puesto INT NOT NULL,Nombre VARCHAR(50) NOT NULL,Identificacion VARCHAR(30) NOT NULL,
Email VARCHAR(50) NOT NULL, Usuario VARCHAR(50) NOT NULL, Contraseña VARCHAR(32) NOT NULL,
fechaContratacion date NOT NULL, activo bit NOT NULL)
--************************************************************************************************************************************
--************************************************Insercion de empresas***************************************************************
--************************************************************************************************************************************
DECLARE @empresasTemp Table(ID int NOT NULL identity(1,1),Datos varchar(MAX) NOT NULL)
DECLARE @LineaDeArchivo varchar(max)
INSERT INTO @empresasTemp (Datos) (SELECT DatosEmpresa FROM @DatosPrueba where TipoOperacion='insercionEmpresa')
set @x=0
select @y= count(*) from @empresasTemp
DECLARE @nombre varchar(50),@DiaCorte varchar(10)
DECLARE @fecha date
while @x<>@y
BEGIN
SET @x=@x+1
Set @LineaDeArchivo=(select Datos from @empresasTemp where ID=@x)
set @start=3
set @end= CHARINDEX('/', @LineaDeArchivo,@start)
set @nombre =SUBSTRING(@LineaDeArchivo, @start, @end - @start)
SET @start = @end + 1
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @DiaCorte= SUBSTRING(@LineaDeArchivo, @start, @end - @start)
SET @start = @end + 1
set @fecha= CONVERT(DATE,SUBSTRING(@LineaDeArchivo, @start, LEN(@LineaDeArchivo)))
INSERT INTO @empresas (Nombre,DiaDeCorte,fechaCreacion,UltimoCorte,Activo) VALUES(@nombre,@DiaCorte,@fecha,@fecha,1)
END
--***********************************************************************************************************************************
--************************************************Insercion de Puestos***************************************************************
--***********************************************************************************************************************************
DECLARE @puestosTemp Table(ID int NOT NULL identity(1,1),Datos varchar(MAX) NOT NULL)
INSERT INTO @puestosTemp (Datos) (SELECT DatosPuestos FROM @DatosPrueba where TipoOperacion=' insercionPuesto')
DECLARE @SalarioPorHora MONEY
set @x=0
select @y= count(*) from @puestosTemp
while @x<>@y
BEGIN
SET @x=@x+1
Set @LineaDeArchivo=(select Datos from @PuestosTemp where ID=@x)
set @start=5
set @end= CHARINDEX('/', @LineaDeArchivo,@start)
set @nombre =SUBSTRING(@LineaDeArchivo, @start, @end - @start)
SET @start = @end + 1
set @SalarioPorHora= CONVERT(MONEY,SUBSTRING(@LineaDeArchivo, @start, LEN(@LineaDeArchivo)))
INSERT INTO @Puestos (Nombre,SalarioPorHora) VALUES(@nombre,@SalarioPorHora)
END
--*********************************************************************************************************************************
--**********************************************Insercion de Documentos Id*********************************************************
--*********************************************************************************************************************************
DECLARE @DocIdTemp Table(ID int NOT NULL identity(1,1),Datos varchar(MAX) NOT NULL)
INSERT INTO @DocIdTemp (Datos) (SELECT DatosDocId FROM @DatosPrueba where TipoOperacion=' insercionDocId')
set @x=0
select @y= count(*) from @DocIdTemp
while @x<>@y
BEGIN
SET @x=@x+1
Set @LineaDeArchivo=(select Datos from @DocIdTemp where ID=@x)
set @start=4
set @nombre= SUBSTRING(@LineaDeArchivo, @start, LEN(@LineaDeArchivo))
INSERT INTO @TipoDocId (Nombre) VALUES(@nombre)
END
--*********************************************************************************************************************************
--********************************************Insercion de Valor Configuracion*****************************************************
--*********************************************************************************************************************************
DECLARE @ValorConfiTemp Table(ID int NOT NULL identity(1,1),Datos varchar(MAX) NOT NULL)
INSERT INTO @ValorConfiTemp (Datos) (SELECT DatosValoresConfiguracion FROM @DatosPrueba where TipoOperacion=' insercionValorConfi')
set @x=0
select @y= count(*) from @ValorConfiTemp
DECLARE @Tipo varchar(50), @valor varchar(50)
while @x<>@y
BEGIN
SET @x=@x+1
Set @LineaDeArchivo=(select Datos from @ValorConfiTemp where ID=@x)
set @start=2
set @end= CHARINDEX('/', @LineaDeArchivo,@start)
set @nombre =SUBSTRING(@LineaDeArchivo, @start, @end - @start)
SET @start = @end + 1
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @Tipo= SUBSTRING(@LineaDeArchivo, @start, @end - @start)
SET @start = @end + 1
set @Valor= SUBSTRING(@LineaDeArchivo, @start, LEN(@LineaDeArchivo))
INSERT INTO @ValoresConfiguracion (Nombre,Tipo,Valor) VALUES(@nombre,@Tipo,@valor)
END
--*********************************************************************************************************************************
--********************************************Insercion de Empleados***************************************************************
--*********************************************************************************************************************************
DECLARE @empleadosTemp Table(ID int NOT NULL identity(1,1),Datos varchar(MAX) NOT NULL,TIPO varchar(50) NOT NULL)
INSERT INTO @empleadosTemp (Datos,TIPO) (SELECT DatosEmpleado,DatosTipoEmpleado FROM @DatosPrueba where TipoOperacion=' insercionEmpleado')
INSERT INTO @TipoEmpleados (Nombre)
(Select DatosTipoEmpleado from @DatosPrueba where TipoOperacion=' insercionEmpleado' group by DatosTipoEmpleado)
Declare @Cedula varchar(50), @usuario varchar(50)
Declare @FKempresa int, @FKpuesto int,@FKTipo int, @FKdoc int
DECLARE @correo varchar(50)
set @x=0
select @y= count(*) from @empleadosTemp
while @x<>@y
BEGIN
SET @x=@x+1
Set @LineaDeArchivo=(select Datos from @empleadosTemp where ID=@x)
set @FKTipo=(SELECT ID from @TipoEmpleados where Nombre = (select TIPO from @empleadosTemp where ID=@x))
set @start=4
set @end= CHARINDEX('/', @LineaDeArchivo,@start)
set @nombre =SUBSTRING(@LineaDeArchivo, @start, @end - @start)
SET @start = @end + 1
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @Cedula= SUBSTRING(@LineaDeArchivo, @start, @end - @start)
SET @start = @end + 1
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @FKdoc= CONVERT(INT,SUBSTRING(@LineaDeArchivo, @start, @end - @start))
SET @start = @end + 1
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @FKempresa= CONVERT(INT,SUBSTRING(@LineaDeArchivo, @start, @end - @start))
SET @start = @end + 1
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @fecha= CONVERT(DATE,SUBSTRING(@LineaDeArchivo, @start, @end - @start))
SET @start = @end + 1
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @correo= SUBSTRING(@LineaDeArchivo, @start, @end - @start)
SET @start = @end + 1
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @FKpuesto= CONVERT(INT,SUBSTRING(@LineaDeArchivo, @start, @end - @start))
SET @start = @end + 1
SET @end = CHARINDEX('/', @LineaDeArchivo, @start)
set @usuario= SUBSTRING(@LineaDeArchivo, @start, @end - @start)
SET @start = @end + 1
set @Valor= HASHBYTES('MD5',SUBSTRING(@LineaDeArchivo, @start, LEN(@LineaDeArchivo)))
INSERT INTO @Empleados (Nombre,Identificacion,FK_Empresa,fechaContratacion,Email,FK_Puesto,Usuario,Contraseña,FK_TipoEmpleado,FK_TipoDocId,activo)
VALUES(@nombre,@Cedula,@FKempresa,@fecha,@correo,@FKpuesto,@usuario,@valor,@FKTipo,@FKdoc,1)
END
--*********************************************************************************************************************************
--*********************************************************************************************************************************
--********************************************Inicia la Transaccion****************************************************************
--*********************************************************************************************************************************
--*********************************************************************************************************************************
-- Variables para control de transaccion
DECLARE @ErrorNumber INT, @ErrorSeverity INT, @ErrorState INT, @CustomError INT
DECLARE @Message VARCHAR(200)
DECLARE @InicieTransaccion BIT
SET @InicieTransaccion = 0 -- control de transacciones
IF @@TRANCOUNT=0 BEGIN
SET @InicieTransaccion = 1
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
BEGIN TRANSACTION
END
BEGIN TRY -- control de excepciones
INSERT INTO dbo.ValoresConfiguracion (Nombre,Tipo,Valor) (SELECT Nombre,Tipo,Valor FROM @ValoresConfiguracion)
iNSERT INTO dbo.Puesto (Nombre,SalarioPorHora) (SELECT Nombre,SalarioPorHora FROM @Puestos)
iNSERT INTO dbo.TipoDocId (Nombre) (SELECT Nombre FROM @TipoDocId)
iNSERT INTO dbo.TipoEmpleado (Nombre) (SELECT Nombre FROM @TipoEmpleados)
INSERT INTO dbo.Empresa (Nombre,fechaCreacion,UltimoCorte,DiaDeCorte,Activo)
(Select Nombre,fechaCreacion,UltimoCorte,DiaDeCorte,Activo FROM @empresas)
INSERT INTO dbo.Empleado (FK_Empresa,FK_Puesto,FK_TipoDocId,FK_TipoEmpleado,Nombre,Identificacion,fechaContratacion,Email,Usuario,Contraseña,activo)
(Select FK_Empresa,FK_Puesto,FK_TipoDocId,FK_TipoEmpleado,Nombre,Identificacion,fechaContratacion,Email,Usuario,Contraseña,activo
from @Empleados)
IF @InicieTransaccion=1 BEGIN
COMMIT
END
END TRY
BEGIN CATCH
SET @ErrorNumber = ERROR_NUMBER()
SET @ErrorSeverity = ERROR_SEVERITY()
SET @ErrorState = ERROR_STATE()
SET @Message = ERROR_MESSAGE()
IF @InicieTransaccion=1 BEGIN
ROLLBACK
END
RAISERROR('%s - Error Number: %i',
@ErrorSeverity, @ErrorState, @Message, @CustomError)
END CATCH
END
Horas trabajadas: 6 horas
Participantes:
-Jonathan Salazar Garcia
-Mariano Montero Muñoz

