Files
Plataforma-de-desarrolladores/Migracion_Bitacora_Eventos_20260920.sql
Jorge Luis caudillo esparza e8160eefba --documentos
2026-09-27 14:44:12 -07:00

354 lines
19 KiB
Transact-SQL

/*
Rediseño aprobado: evento -> registros -> campos/relaciones.
Instalado el 20/09/2026 en SIG_PlataformaDesarolladores con autorización del usuario.
Instalación: aplicación detenida, respaldo verificado y UNA transacción del
instalador en UNA conexión para este archivo y Procedimientos_Bitacora_Eventos_20260920.sql.
El instalador debe detenerse ante cualquier error, revertir y no continuar lotes.
Ningún PA administra transacciones. No agrupar historia por fecha/usuario.
*/
SET NOCOUNT ON;
IF @@TRANCOUNT = 0
THROW 51000, 'La migración requiere una transacción externa del instalador.', 1;
IF OBJECT_ID(N'dbo.Bit_Bitacora', N'U') IS NULL
OR OBJECT_ID(N'dbo.Bit_DefinicionesAccion', N'U') IS NULL
OR OBJECT_ID(N'dbo.Bit_BitacoraCampos', N'U') IS NULL
OR OBJECT_ID(N'dbo.Bit_BitacoraRelaciones', N'U') IS NULL
THROW 51000, 'No se encontró la estructura de bitácora revisada.', 1;
-- Impedir escrituras concurrentes durante la migración.
DECLARE @Registros bigint;
SELECT @Registros = COUNT_BIG(*) FROM dbo.Bit_Bitacora WITH (TABLOCKX, HOLDLOCK);
CREATE TABLE #ControlMigracionBitacora
(
Registros bigint NOT NULL,
Campos bigint NOT NULL,
Relaciones bigint NOT NULL
);
INSERT INTO #ControlMigracionBitacora
SELECT @Registros,
(SELECT COUNT_BIG(*) FROM dbo.Bit_BitacoraCampos),
(SELECT COUNT_BIG(*) FROM dbo.Bit_BitacoraRelaciones);
GO
IF @@TRANCOUNT = 0
THROW 51000, 'La migración requiere una transacción externa.', 1;
IF OBJECT_ID(N'dbo.Bit_BitacoraEventos', N'U') IS NULL
BEGIN
CREATE TABLE dbo.Bit_BitacoraEventos
(
CveBitacoraEvento bigint IDENTITY(1, 1) NOT NULL
CONSTRAINT PK_Bit_BitacoraEventos PRIMARY KEY,
CveDefinicionAccion int NULL,
CveUsuarioEjecuta int NOT NULL,
CveUsuarioAutoriza int NULL,
FechaAutorizacion datetime NULL,
DescripcionMovimiento nvarchar(1000) COLLATE Modern_Spanish_CS_AS NOT NULL,
FechaMovimiento datetime NOT NULL
CONSTRAINT DF_Bit_BitacoraEventos_Fecha DEFAULT SYSDATETIME(),
DireccionIP varchar(50) COLLATE Modern_Spanish_CS_AS NULL,
NombreEquipo varchar(150) COLLATE Modern_Spanish_CS_AS NULL,
Modulo varchar(150) COLLATE Modern_Spanish_CS_AS NULL,
EsHistorico bit NOT NULL CONSTRAINT DF_Bit_BitacoraEventos_Historico DEFAULT (0),
CONSTRAINT FK_Bit_BitacoraEventos_Accion FOREIGN KEY (CveDefinicionAccion)
REFERENCES dbo.Bit_DefinicionesAccion(CveDefinicionAccion),
CONSTRAINT FK_Bit_BitacoraEventos_Usuario FOREIGN KEY (CveUsuarioEjecuta)
REFERENCES dbo.Sis_Usuarios(CveUsuario),
CONSTRAINT FK_Bit_BitacoraEventos_Autoriza FOREIGN KEY (CveUsuarioAutoriza)
REFERENCES dbo.Sis_Usuarios(CveUsuario),
CONSTRAINT CK_Bit_BitacoraEventos_Autorizacion
CHECK (CveUsuarioAutoriza IS NOT NULL OR FechaAutorizacion IS NULL)
);
END;
IF COL_LENGTH('dbo.Bit_Bitacora', 'CveBitacoraEvento') IS NULL
ALTER TABLE dbo.Bit_Bitacora ADD CveBitacoraEvento bigint NULL;
IF COL_LENGTH('dbo.Bit_Bitacora', 'LlaveRegistroTexto') IS NULL
ALTER TABLE dbo.Bit_Bitacora ADD LlaveRegistroTexto nvarchar(250) COLLATE Modern_Spanish_CS_AS NULL;
IF COL_LENGTH('dbo.Bit_BitacoraCampos', 'ValorAnteriorMostrar') IS NULL
ALTER TABLE dbo.Bit_BitacoraCampos ADD ValorAnteriorMostrar nvarchar(max) COLLATE Modern_Spanish_CS_AS NULL;
IF COL_LENGTH('dbo.Bit_BitacoraCampos', 'ValorNuevoMostrar') IS NULL
ALTER TABLE dbo.Bit_BitacoraCampos ADD ValorNuevoMostrar nvarchar(max) COLLATE Modern_Spanish_CS_AS NULL;
IF COL_LENGTH('dbo.Bit_DefinicionesAccion', 'CodigoAccion') IS NULL
ALTER TABLE dbo.Bit_DefinicionesAccion ADD CodigoAccion varchar(150) COLLATE Modern_Spanish_CI_AS NULL;
GO
IF @@TRANCOUNT = 0
THROW 51000, 'La migración requiere una transacción externa.', 1;
IF COL_LENGTH('dbo.Bit_Bitacora', 'DescripcionMovimiento') IS NOT NULL
BEGIN
EXEC sys.sp_executesql N' CREATE TABLE #CorrespondenciaEventos
(
CveBitacora bigint NOT NULL PRIMARY KEY,
CveBitacoraEvento bigint NOT NULL UNIQUE
);
-- OUTPUT conserva la correspondencia real de las identidades; nunca se igualan claves.
MERGE dbo.Bit_BitacoraEventos AS Destino
USING
(
SELECT *
FROM dbo.Bit_Bitacora
WHERE CveBitacoraEvento IS NULL
) AS Origen
ON 1 = 0
WHEN NOT MATCHED THEN
INSERT (CveDefinicionAccion, CveUsuarioEjecuta, CveUsuarioAutoriza, FechaAutorizacion, DescripcionMovimiento, FechaMovimiento, DireccionIP, NombreEquipo, Modulo, EsHistorico)
VALUES (Origen.CveDefinicionAccion, Origen.CveUsuarioEjecuta, Origen.CveUsuarioAutoriza, Origen.FechaAutorizacion, Origen.DescripcionMovimiento, Origen.FechaMovimiento, Origen.DireccionIP, Origen.NombreEquipo, Origen.Modulo, 1)
OUTPUT Origen.CveBitacora, inserted.CveBitacoraEvento
INTO #CorrespondenciaEventos(CveBitacora, CveBitacoraEvento);
UPDATE B
SET B.CveBitacoraEvento = C.CveBitacoraEvento
FROM dbo.Bit_Bitacora AS B
INNER JOIN #CorrespondenciaEventos AS C ON C.CveBitacora = B.CveBitacora;
UPDATE dbo.Bit_Bitacora
SET LlaveRegistroTexto = LlaveRegistro
WHERE LlaveRegistroTexto IS NULL;
IF EXISTS
(
SELECT B.CveBitacora, B.CveDefinicionAccion, B.CveUsuarioEjecuta, B.CveUsuarioAutoriza, B.FechaAutorizacion, B.DescripcionMovimiento, B.FechaMovimiento, B.DireccionIP, B.NombreEquipo, B.Modulo
FROM dbo.Bit_Bitacora AS B
EXCEPT
SELECT B.CveBitacora, E.CveDefinicionAccion, E.CveUsuarioEjecuta, E.CveUsuarioAutoriza, E.FechaAutorizacion, E.DescripcionMovimiento, E.FechaMovimiento, E.DireccionIP, E.NombreEquipo, E.Modulo
FROM dbo.Bit_Bitacora AS B
INNER JOIN dbo.Bit_BitacoraEventos AS E ON E.CveBitacoraEvento = B.CveBitacoraEvento
)
THROW 51000, ''La copia de los encabezados no coincide; se cancela la migración.'', 1;
IF EXISTS (SELECT 1 FROM dbo.Bit_Bitacora WHERE CveBitacoraEvento IS NULL OR LlaveRegistroTexto IS NULL)
THROW 51000, ''Hay registros sin evento o sin clave histórica.'', 1;
IF EXISTS
(
SELECT CveBitacoraEvento
FROM dbo.Bit_Bitacora
GROUP BY CveBitacoraEvento
HAVING COUNT_BIG(*) <> 1
)
THROW 51000, ''La correspondencia histórica no es de uno a uno.'', 1;
-- Las dependencias de las columnas trasladadas se quitan después de verificar la copia.
DECLARE @Retirar nvarchar(max) = N'''';
SELECT @Retirar += N''ALTER TABLE dbo.Bit_Bitacora DROP CONSTRAINT '' + QUOTENAME(F.name) + N'';'' + CHAR(10)
FROM sys.foreign_keys AS F
WHERE F.parent_object_id = OBJECT_ID(N''dbo.Bit_Bitacora'')
AND EXISTS
(
SELECT 1
FROM sys.foreign_key_columns AS FC
INNER JOIN sys.columns AS C ON C.object_id = FC.parent_object_id AND C.column_id = FC.parent_column_id
WHERE FC.constraint_object_id = F.object_id
AND C.name IN (''CveDefinicionAccion'', ''CveUsuarioEjecuta'', ''CveUsuarioAutoriza'', ''FechaAutorizacion'', ''DescripcionMovimiento'', ''FechaMovimiento'', ''DireccionIP'', ''NombreEquipo'', ''Modulo'')
);
SELECT @Retirar += N''ALTER TABLE dbo.Bit_Bitacora DROP CONSTRAINT '' + QUOTENAME(D.name) + N'';'' + CHAR(10)
FROM sys.default_constraints AS D
INNER JOIN sys.columns AS C ON C.object_id = D.parent_object_id AND C.column_id = D.parent_column_id
WHERE D.parent_object_id = OBJECT_ID(N''dbo.Bit_Bitacora'')
AND C.name IN (''CveDefinicionAccion'', ''CveUsuarioEjecuta'', ''CveUsuarioAutoriza'', ''FechaAutorizacion'', ''DescripcionMovimiento'', ''FechaMovimiento'', ''DireccionIP'', ''NombreEquipo'', ''Modulo'');
IF OBJECT_ID(N''dbo.CK_Bit_Bitacora_Autorizacion'', N''C'') IS NOT NULL
SET @Retirar += N''ALTER TABLE dbo.Bit_Bitacora DROP CONSTRAINT CK_Bit_Bitacora_Autorizacion;'';
EXEC sys.sp_executesql @Retirar;
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N''dbo.Bit_Bitacora'') AND name = N''IX_Bit_Bitacora_Tabla_Llave_Fecha'')
DROP INDEX IX_Bit_Bitacora_Tabla_Llave_Fecha ON dbo.Bit_Bitacora;
-- Sus columnas pasan al evento; los índices equivalentes se crean en el padre.
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N''dbo.Bit_Bitacora'') AND name = N''IX_Bit_Bitacora_FechaMovimiento'')
DROP INDEX IX_Bit_Bitacora_FechaMovimiento ON dbo.Bit_Bitacora;
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N''dbo.Bit_Bitacora'') AND name = N''IX_Bit_Bitacora_CveUsuarioEjecuta'')
DROP INDEX IX_Bit_Bitacora_CveUsuarioEjecuta ON dbo.Bit_Bitacora;
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N''dbo.Bit_Bitacora'') AND name = N''IX_Bit_Bitacora_CveUsuarioAutoriza'')
DROP INDEX IX_Bit_Bitacora_CveUsuarioAutoriza ON dbo.Bit_Bitacora;
-- Si hay otras dependencias no revisadas, ALTER falla y el instalador revierte.
ALTER TABLE dbo.Bit_Bitacora ALTER COLUMN LlaveRegistro nvarchar(250) COLLATE Modern_Spanish_CS_AS NULL;
UPDATE dbo.Bit_Bitacora SET LlaveRegistro = NULL
WHERE TRY_CONVERT(bigint, LlaveRegistro) IS NULL;
ALTER TABLE dbo.Bit_Bitacora ALTER COLUMN LlaveRegistro bigint NULL;
ALTER TABLE dbo.Bit_Bitacora DROP COLUMN
CveDefinicionAccion,
CveUsuarioEjecuta,
CveUsuarioAutoriza,
FechaAutorizacion,
DescripcionMovimiento,
FechaMovimiento,
DireccionIP,
NombreEquipo,
Modulo;
';
END;
GO
IF @@TRANCOUNT = 0
THROW 51000, 'La migración requiere una transacción externa.', 1;
IF EXISTS (SELECT 1 FROM dbo.Bit_Bitacora WHERE CveBitacoraEvento IS NULL)
THROW 51000, 'Hay registros sin evento.', 1;
ALTER TABLE dbo.Bit_Bitacora ALTER COLUMN CveBitacoraEvento bigint NOT NULL;
IF OBJECT_ID(N'dbo.FK_Bit_Bitacora_Evento', N'F') IS NULL
ALTER TABLE dbo.Bit_Bitacora WITH CHECK ADD CONSTRAINT FK_Bit_Bitacora_Evento
FOREIGN KEY (CveBitacoraEvento) REFERENCES dbo.Bit_BitacoraEventos(CveBitacoraEvento);
IF OBJECT_ID(N'dbo.CK_Bit_Bitacora_Llave', N'C') IS NULL
ALTER TABLE dbo.Bit_Bitacora WITH CHECK ADD CONSTRAINT CK_Bit_Bitacora_Llave
CHECK (LlaveRegistro IS NOT NULL OR NULLIF(LlaveRegistroTexto, N'') IS NOT NULL);
IF OBJECT_ID(N'dbo.UQ_Bit_DefinicionesAccion', N'UQ') IS NOT NULL
ALTER TABLE dbo.Bit_DefinicionesAccion DROP CONSTRAINT UQ_Bit_DefinicionesAccion;
ALTER TABLE dbo.Bit_DefinicionesAccion ALTER COLUMN CveTabla int NULL;
ALTER TABLE dbo.Bit_DefinicionesAccion ALTER COLUMN CveTipoMovimiento tinyint NULL;
UPDATE dbo.Bit_DefinicionesAccion
SET CodigoAccion = CONCAT('Historica_', CveDefinicionAccion)
WHERE CodigoAccion IS NULL;
ALTER TABLE dbo.Bit_DefinicionesAccion ALTER COLUMN CodigoAccion varchar(150) COLLATE Modern_Spanish_CI_AS NOT NULL;
IF OBJECT_ID(N'dbo.UQ_Bit_DefinicionesAccion_Codigo', N'UQ') IS NULL
ALTER TABLE dbo.Bit_DefinicionesAccion ADD CONSTRAINT UQ_Bit_DefinicionesAccion_Codigo UNIQUE (CodigoAccion);
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.Bit_BitacoraEventos') AND name = N'IX_Bit_BitacoraEventos_Fecha')
CREATE INDEX IX_Bit_BitacoraEventos_Fecha ON dbo.Bit_BitacoraEventos (FechaMovimiento DESC, CveBitacoraEvento DESC);
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.Bit_BitacoraEventos') AND name = N'IX_Bit_BitacoraEventos_Usuario_Fecha')
CREATE INDEX IX_Bit_BitacoraEventos_Usuario_Fecha ON dbo.Bit_BitacoraEventos (CveUsuarioEjecuta, FechaMovimiento DESC);
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.Bit_BitacoraEventos') AND name = N'IX_Bit_BitacoraEventos_Autoriza_Fecha')
CREATE INDEX IX_Bit_BitacoraEventos_Autoriza_Fecha ON dbo.Bit_BitacoraEventos (CveUsuarioAutoriza, FechaAutorizacion);
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.Bit_BitacoraEventos') AND name = N'IX_Bit_BitacoraEventos_Accion_Fecha')
CREATE INDEX IX_Bit_BitacoraEventos_Accion_Fecha ON dbo.Bit_BitacoraEventos (CveDefinicionAccion, FechaMovimiento DESC);
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.Bit_Bitacora') AND name = N'IX_Bit_Bitacora_Evento')
CREATE INDEX IX_Bit_Bitacora_Evento ON dbo.Bit_Bitacora (CveBitacoraEvento, CveBitacora);
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.Bit_Bitacora') AND name = N'IX_Bit_Bitacora_Tabla_LlaveNumero')
CREATE INDEX IX_Bit_Bitacora_Tabla_LlaveNumero ON dbo.Bit_Bitacora (CveTabla, LlaveRegistro, CveBitacoraEvento) WHERE LlaveRegistro IS NOT NULL;
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.Bit_Bitacora') AND name = N'IX_Bit_Bitacora_Tabla_LlaveTexto')
CREATE INDEX IX_Bit_Bitacora_Tabla_LlaveTexto ON dbo.Bit_Bitacora (CveTabla, LlaveRegistroTexto, CveBitacoraEvento) WHERE LlaveRegistroTexto IS NOT NULL;
-- Conservar índices equivalentes de campos y todas las relaciones existentes.
IF NOT EXISTS
(
SELECT 1
FROM sys.index_columns AS IC
INNER JOIN sys.indexes AS I ON I.object_id = IC.object_id AND I.index_id = IC.index_id
INNER JOIN sys.columns AS C ON C.object_id = IC.object_id AND C.column_id = IC.column_id
WHERE IC.object_id = OBJECT_ID(N'dbo.Bit_BitacoraCampos')
AND IC.key_ordinal = 1 AND C.name = N'CveBitacora'
AND I.is_disabled = 0 AND I.has_filter = 0
)
CREATE INDEX IX_Bit_BitacoraCampos_Registro ON dbo.Bit_BitacoraCampos(CveBitacora);
-- Códigos de operaciones reales de los servicios; las claves las asigna IDENTITY.
DECLARE @Acciones TABLE
(
CodigoAccion varchar(150) COLLATE Modern_Spanish_CI_AS NOT NULL PRIMARY KEY,
NombreAccion varchar(150) COLLATE Modern_Spanish_CS_AS NOT NULL
);
INSERT INTO @Acciones(CodigoAccion, NombreAccion)
VALUES
('ActualizarAvanceEtapa', 'Actualizar avance etapa'),
('ActualizarProductoServicioPrecioTramite', 'Actualizar producto servicio precio tramite'),
('AgregarSolicitudEtapa', 'Agregar solicitud etapa'),
('AgregarTipoTramitePadreTramite', 'Agregar tipo tramite padre tramite'),
('CambiarEstatusSolicitud', 'Cambiar estatus de solicitud'),
('CancelarCita', 'Cancelar cita'),
('CargarDocumentoSolicitud', 'Cargar documento solicitud'),
('CargarDocumentoVisita', 'Cargar documento visita'),
('EliminarArchivoEtapa', 'Eliminar archivo etapa'),
('EliminarClasificacion', 'Eliminar clasificacion'),
('EliminarComentarioVisita', 'Eliminar comentario visita'),
('EliminarConfiguracionSolicitud', 'Eliminar configuracion solicitud'),
('EliminarCuestionarioVisita', 'Eliminar cuestionario visita'),
('EliminarDiaFestivo', 'Eliminar dia festivo'),
('EliminarDocumentoRequeridoTramite', 'Eliminar documento requerido tramite'),
('EliminarDocumentoSolicitud', 'Eliminar documento solicitud'),
('EliminarDocumentoVisita', 'Eliminar documento visita'),
('EliminarEstatusTramite', 'Eliminar estatus tramite'),
('EliminarEtapa', 'Eliminar etapa'),
('EliminarFraccionamiento', 'Eliminar fraccionamiento'),
('EliminarGisEtapa', 'Eliminar gis etapa'),
('EliminarLote', 'Eliminar lote'),
('EliminarOpcionTramite', 'Eliminar opcion tramite'),
('EliminarOpcionVisita', 'Eliminar opcion visita'),
('EliminarPagoDetalleTramite', 'Eliminar pago detalle tramite'),
('EliminarPagoTramite', 'Eliminar pago tramite'),
('EliminarPlantillaVisita', 'Eliminar plantilla visita'),
('EliminarPreguntaTramite', 'Eliminar pregunta tramite'),
('EliminarPreguntaVisita', 'Eliminar pregunta visita'),
('EliminarProductoServicio', 'Eliminar producto servicio'),
('EliminarTipoDocumentoTramite', 'Eliminar tipo documento tramite'),
('EliminarTipoTramite', 'Eliminar tipo tramite'),
('EliminarTipoTramitePadreTramite', 'Eliminar tipo tramite padre tramite'),
('EliminarTurno', 'Eliminar turno'),
('EliminarUnidadMedida', 'Eliminar unidad medida'),
('EliminarUsuario', 'Eliminar usuario'),
('GuardarCita', 'Guardar cita'),
('GuardarClasificacion', 'Guardar clasificacion'),
('GuardarClienteUsuario', 'Guardar cliente usuario'),
('GuardarComentarioVisita', 'Guardar comentario visita'),
('GuardarCondicionesEtapa', 'Guardar condiciones etapa'),
('GuardarConfiguracionSolicitud', 'Guardar configuracion solicitud'),
('GuardarConfiguracionVisitas', 'Guardar configuracion visitas'),
('GuardarCuestionarioVisita', 'Guardar cuestionario visita'),
('GuardarDiaFestivo', 'Guardar dia festivo'),
('GuardarDocumentoRequeridoTramite', 'Guardar documento requerido tramite'),
('GuardarEstatusTramite', 'Guardar estatus tramite'),
('GuardarEtapa', 'Guardar etapa'),
('GuardarFraccionamiento', 'Guardar fraccionamiento'),
('GuardarGisEtapa', 'Guardar gis etapa'),
('GuardarLote', 'Guardar lote'),
('GuardarLotes', 'Guardar lotes'),
('GuardarOpcionTramite', 'Guardar opcion tramite'),
('GuardarOpcionVisita', 'Guardar opcion visita'),
('GuardarPagoDetalleTramite', 'Guardar pago detalle tramite'),
('GuardarPagoTramite', 'Guardar pago tramite'),
('GuardarPlantillaVisita', 'Guardar plantilla visita'),
('GuardarPreguntaTramite', 'Guardar pregunta tramite'),
('GuardarPreguntaVisita', 'Guardar pregunta visita'),
('GuardarProductoServicio', 'Guardar producto servicio'),
('GuardarTipoDocumentoTramite', 'Guardar tipo documento tramite'),
('GuardarTipoTramite', 'Guardar tipo tramite'),
('GuardarTurno', 'Guardar turno'),
('GuardarUnidadMedida', 'Guardar unidad medida'),
('GuardarUsuario', 'Guardar usuario'),
('GuardarVisita', 'Guardar visita'),
('LimpiarLotesEtapa', 'Limpiar lotes etapa'),
('MoverOrdenEtapa', 'Mover orden etapa'),
('RegistrarArchivoEtapa', 'Registrar archivo etapa'),
('ReiniciarContrasenaUsuario', 'Reiniciar contraseña de usuario'),
('ReordenarCatalogoTramite', 'Reordenar catalogo tramite'),
('ReordenarPlantillaVisita', 'Reordenar plantilla visita'),
('RevisarDocumentoSolicitud', 'Revisar documento solicitud');
INSERT INTO dbo.Bit_DefinicionesAccion
(CodigoAccion, NombreAccion, DescripcionAccion, CveTabla, CveTipoMovimiento, Activo)
SELECT A.CodigoAccion, A.NombreAccion, A.NombreAccion, NULL, NULL, 1
FROM @Acciones AS A
WHERE NOT EXISTS
(
SELECT 1 FROM dbo.Bit_DefinicionesAccion AS D WHERE D.CodigoAccion = A.CodigoAccion
);
-- Resolver el turno con metadatos existentes, sin claves de catálogo inventadas.
UPDATE C
SET C.CveTablaReferencia = T.CveTabla,
C.CveCampoMostrarReferencia = M.CveCampo
FROM dbo.Bit_Campos AS C
INNER JOIN dbo.Bit_Tablas AS H ON H.CveTabla = C.CveTabla
INNER JOIN dbo.Bit_Tablas AS T ON T.NombreTablaSQL = 'Sis_Turnos'
INNER JOIN dbo.Bit_Campos AS M ON M.CveTabla = T.CveTabla AND M.NombreCampoSQL = 'Turno'
WHERE H.NombreTablaSQL = 'Sis_TurnosHorarios' AND C.NombreCampoSQL = 'CveTurno';
IF EXISTS
(
SELECT 1 FROM #ControlMigracionBitacora
WHERE Registros <> (SELECT COUNT_BIG(*) FROM dbo.Bit_Bitacora)
OR Campos <> (SELECT COUNT_BIG(*) FROM dbo.Bit_BitacoraCampos)
OR Relaciones <> (SELECT COUNT_BIG(*) FROM dbo.Bit_BitacoraRelaciones)
)
THROW 51000, 'Cambió la cantidad de registros, campos o relaciones durante la migración.', 1;
SELECT
(SELECT COUNT_BIG(*) FROM dbo.Bit_BitacoraEventos WHERE EsHistorico = 1) AS EventosHistoricos,
(SELECT COUNT_BIG(*) FROM dbo.Bit_Bitacora) AS Registros,
(SELECT COUNT_BIG(*) FROM dbo.Bit_BitacoraCampos) AS Campos,
(SELECT COUNT_BIG(*) FROM dbo.Bit_BitacoraRelaciones) AS Relaciones;
DROP TABLE #ControlMigracionBitacora;
GO