Correccion base de datos + creacion carga de datos catalogos + consulta profesor

 El dia de hoy se hicieron unas correcciones en algunos valores de las tablas de la base de datos para que coincidieran con el archivo XML de catalogos, entre los mas importantes fue la fecha de Contratacion de los empleados el cual se incluyo dentro de los datos visibles de la opcion de "editar empleado", para crear el script de carga de datos se tomo como base este video  32 Import xml file to sql server using sql query, para poder correr el sricpt es nesecario ser un usuario admin, ya que un usuario creado desde la base de datos no tiene permitido ejectuarlo, debido a que el script consiste en habilitar las configuraciones avanzadas del sql server para poder leer documento dentro del servidor en este caso mi laptop, el script solo puedo ejecutar yo, debido a que el archivo solo esta ubicado en una direccion especifica de mi laptop. Ademas se le solicito una opinion al profesor sobre el catalogo. Se estuvo trabajando 2 horas en este avance.

-- Habilita las opciones avanzadas de configuracion del servidor SQL Server
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
-- Habilita OPENROWSET y OPENDATASOURCE para leer archivos externos
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE
GO

DECLARE @xml XML

SELECT @xml = BulkColumn -- Almacena el contenido del archivo XML en una variable de tipo XML
FROM OPENROWSET(BULK 'C:\Users\Usuario\Desktop\BD1\Tarea3\Datos (1).xml', SINGLE_BLOB) AS x

-- Puestos
INSERT INTO dbo.Puesto (Nombre, SalarioXHora)
SELECT
    nodo.value('@Nombre', 'VARCHAR(100)')
    ,nodo.value('@SalarioXHora', 'MONEY')
FROM @xml.nodes('/Datos/Puestos/Puesto') AS T(nodo)

-- TiposJornada
INSERT INTO dbo.TipoJornada (id, Nombre, HoraInicio, HoraFin)
SELECT
    nodo.value('@Id', 'INT')
    ,nodo.value('@Nombre', 'VARCHAR(50)')
    ,CAST(nodo.value('@HoraInicio', 'VARCHAR(10)') AS DATETIME)
    ,CAST(nodo.value('@HoraFin', 'VARCHAR(10)') AS DATETIME)
FROM @xml.nodes('/Datos/TiposJornada/TipoJornada') AS T(nodo)

-- Feriados
INSERT INTO dbo.Feriado (id, Nombre, Fecha)
SELECT
    nodo.value('@Id', 'INT')
    ,nodo.value('@Nombre', 'VARCHAR(100)')
    ,CAST(nodo.value('@Fecha', 'VARCHAR(20)') AS DATETIME)
FROM @xml.nodes('/Datos/Feriados/Feriado') AS T(nodo)

-- TiposEvento
INSERT INTO dbo.TipoEvento (id, Nombre)
SELECT
    nodo.value('@Id', 'INT')
    ,nodo.value('@Nombre', 'VARCHAR(100)')
FROM @xml.nodes('/Datos/TiposEvento/TipoEvento') AS T(nodo)

-- TiposMovimiento
INSERT INTO dbo.TipoMov (id, Nombre, Accion)
SELECT
    nodo.value('@Id', 'INT')
    ,nodo.value('@Nombre', 'VARCHAR(100)')
    ,nodo.value('@Accion', 'CHAR(1)')
FROM @xml.nodes('/Datos/TiposMovimiento/TipoMovimiento') AS T(nodo)

-- TiposDeduccion
INSERT INTO dbo.TipoDeduccion (id, Nombre, FlagObligatorio, FlagPorcentual, Porcentaje, idTipoMov)
SELECT
    nodo.value('@Id', 'INT')
    ,nodo.value('@Nombre', 'VARCHAR(100)')
    ,CAST(nodo.value('@EsObligatoria', 'INT') AS BIT)
    ,CAST(nodo.value('@EsPorcentual', 'INT') AS BIT)
    ,nodo.value('@Valor', 'DECIMAL(6,4)')
    ,(SELECT tm.id FROM dbo.TipoMov AS tm WHERE (tm.Nombre = nodo.value('@TipoMovimiento', 'VARCHAR(100)')))
FROM @xml.nodes('/Datos/TiposDeduccion/TipoDeduccion') AS T(nodo)

-- Usuarios
INSERT INTO dbo.Usuario (UserName, Password, Tipo)
SELECT
    nodo.value('@Username', 'VARCHAR(50)')
    ,nodo.value('@PasswordHash', 'VARCHAR(255)')
    ,nodo.value('@Tipo', 'TINYINT')
FROM @xml.nodes('/Datos/Usuarios/Usuario') AS T(nodo)

-- Errores
INSERT INTO dbo.Error (Codigo, Descripcion)
SELECT
    nodo.value('@Codigo', 'INT')
    ,nodo.value('@Descripcion', 'VARCHAR(256)')
FROM @xml.nodes('/Datos/Error/error') AS T(nodo)

Comments