jueves, 27 de junio de 2013

Migración de la Base de Datos no normalizada


Creación del script de migración de la base de datos no normalizada a la base de datos que se utilizar en el proyecto a continuación se presenta el codigo escrito en MS SQL:

DECLARE @ErrorNumber INT, @ErrorSeverity INT, @ErrorState INT,
@Message VARCHAR(200)
BEGIN

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRAN
BEGIN TRY
INSERT INTO FB_Cajero(Nombre)
SELECT DISTINCT E.EMPLEADO
FROM Fila.dbo.asignacion E

INSERT INTO FB_TipoServicio(Nombre,Prefijo)
VALUES('USUARIO_ESPECIAL','E')

INSERT INTO FB_TipoServicio(Nombre,Prefijo)
VALUES('UN_SOLO_TRAMITE','A')

INSERT INTO FB_TipoServicio(Nombre,Prefijo)
VALUES('MULTIPLES_TRAMITES','M')

INSERT INTO FB_TipoServicio(Nombre,Prefijo)
VALUES('SERVICIO_CLIENTE','S')


INSERT INTO FB_Estacion(Nombre)
SELECT C.ESTACION
FROM Fila.dbo.configuracion C

 --Prioridad Uno Estacion
 INSERT INTO FB_EstacionXServicio(FK_Estacion,FK_TipoServicio,Prioridad)
 SELECT E.Id_Estacion,TP.Id_TipoServicio,1
 FROM Fila.dbo.configuracion C INNER JOIN FB_Estacion E ON C.ESTACION = E.Nombre
 INNER JOIN FB_TipoServicio TP ON TP.Nombre = C.TIPO_TRAMITE_PRIMERA_PRIORIDAD
  --Prioridad Dos Estacion
  
 INSERT INTO FB_EstacionXServicio(FK_Estacion,FK_TipoServicio,Prioridad)
 SELECT E.Id_Estacion,TP.Id_TipoServicio,2
 FROM Fila.dbo.configuracion C INNER JOIN FB_Estacion E ON C.ESTACION = E.Nombre
 INNER JOIN FB_TipoServicio TP ON TP.Nombre = C.TIPO_TRAMITE_SEGUNDA_PRIORIDAD
   --Prioridad Tres Estacion
   
 INSERT INTO FB_EstacionXServicio(FK_Estacion,FK_TipoServicio,Prioridad)   
 SELECT E.Id_Estacion,TP.Id_TipoServicio,3
 FROM Fila.dbo.configuracion C INNER JOIN FB_Estacion E ON C.ESTACION = E.Nombre
 INNER JOIN FB_TipoServicio TP ON TP.Nombre = C.TIPO_TRAMITE_TERCERA_PRIORIDAD
INSERT INTO  FB_CajeroXEstacion(FK_Estacion,FK_Cajero,FechaHoraAbre,FechaHoraCierra)
 SELECT  E.Id_Estacion,C.Id_Cajero ,
 (CONVERT (varchar(10),A.FECHA) +' '+CONVERT(varchar(10), A.HORA_INICIO)),
 (CONVERT (varchar(10),A.FECHA) +' '+CONVERT(varchar(10), A.HORA_FIN))
 FROM Fila.dbo.asignacion A INNER JOIN FB_Cajero C ON C.Nombre = A.EMPLEADO
 INNER JOIN FB_Estacion E ON E.Nombre = A.ESTACION
  
INSERT INTO FB_Ficha(FK_TipoServicio,Codigo,TiempoSolicitud,TiempoInicioServicio,TiempoFinServicio,)
SELECT DISTINCT
TS.Id_TipoServicio,
AF.FICHA,
(CONVERT (varchar(10),AF.FECHA) +' '+CONVERT(varchar(10), AF.HORA_EMISION)),
(CONVERT (varchar(10),AF.FECHA) +' '+CONVERT(varchar(10), AF.HORA_ATENCION)),
(CONVERT (varchar(10),AF.FECHA) +' '+CONVERT(varchar(10), AF.HORA_FIN))
  FROM Fila.dbo.atencion_ficha AF 
  INNER JOIN FB_TipoServicio TS ON AF.FICHA LIKE TS.Prefijo+'%'
  
 INSERT INTO FB_EventoXEstacion(FK_Ficha,FK_Estacion,Codigo,Duracion)
SELECT DISTINCT F.Id_Ficha,
E.Id_Estacion,
AF.FICHA,
DATEDIFF(MINUTE,AF.HORA_ATENCION,AF.HORA_EMISION)
  FROM Fila.dbo.atencion_ficha AF 
  INNER JOIN FB_TipoServicio TS ON AF.FICHA LIKE TS.Prefijo+'%'
  INNER JOIN FB_Ficha F ON AF.FICHA = F.Codigo
  INNER JOIN FB_Estacion E ON AF.ESTACION = E.Nombre
  
 COMMIT
  
END TRY
BEGIN CATCH
SET @ErrorNumber = ERROR_NUMBER()
SET @ErrorSeverity = ERROR_SEVERITY()
SET @ErrorState = ERROR_STATE()
SET @Message = ERROR_MESSAGE()
ROLLBACK
RAISERROR(@Message, @ErrorSeverity, @ErrorState)
END CATCH

END


Duración 4 horas 

No hay comentarios:

Publicar un comentario