SET NOCOUNT ON; GO IF OBJECT_ID(N'dbo.FraccionamientosEtapas', N'U') IS NULL BEGIN THROW 50001, 'No existe la tabla dbo.FraccionamientosEtapas.', 1; END; GO IF COL_LENGTH(N'dbo.FraccionamientosEtapas', N'Aprobado_Prefactibilidad') IS NULL BEGIN ALTER TABLE dbo.FraccionamientosEtapas ADD Aprobado_Prefactibilidad bit NULL; END; GO IF COL_LENGTH(N'dbo.FraccionamientosEtapas', N'RequiereObrasExternas') IS NULL BEGIN ALTER TABLE dbo.FraccionamientosEtapas ADD RequiereObrasExternas bit NULL; END; GO IF COL_LENGTH(N'dbo.FraccionamientosEtapas', N'TipoDeObra') IS NULL BEGIN ALTER TABLE dbo.FraccionamientosEtapas ADD TipoDeObra bit NULL; END; GO IF COL_LENGTH(N'dbo.FraccionamientosEtapas', N'LiberacionMacromedidor') IS NULL BEGIN ALTER TABLE dbo.FraccionamientosEtapas ADD LiberacionMacromedidor bit NULL; END; GO IF COL_LENGTH(N'dbo.FraccionamientosEtapas', N'Relotificacion') IS NULL BEGIN ALTER TABLE dbo.FraccionamientosEtapas ADD Relotificacion bit NULL; END; GO IF COL_LENGTH(N'dbo.FraccionamientosEtapas', N'LiberacionDeLotes') IS NULL BEGIN ALTER TABLE dbo.FraccionamientosEtapas ADD LiberacionDeLotes bit NULL; END; GO IF COL_LENGTH(N'dbo.FraccionamientosEtapas', N'LiberacionDePagosDeDerechos') IS NULL BEGIN ALTER TABLE dbo.FraccionamientosEtapas ADD LiberacionDePagosDeDerechos bit NULL; END; GO IF OBJECT_ID(N'dbo.Tra_TiposTramite', N'U') IS NULL BEGIN THROW 50002, 'No existe la tabla dbo.Tra_TiposTramite.', 1; END; GO IF COL_LENGTH(N'dbo.Tra_TiposTramite', N'HabilitaAprobado_Prefactibilidad') IS NULL BEGIN ALTER TABLE dbo.Tra_TiposTramite ADD HabilitaAprobado_Prefactibilidad bit NULL; END; GO IF COL_LENGTH(N'dbo.Tra_TiposTramite', N'HabilitaRequiereObrasExternas') IS NULL BEGIN ALTER TABLE dbo.Tra_TiposTramite ADD HabilitaRequiereObrasExternas bit NULL; END; GO IF COL_LENGTH(N'dbo.Tra_TiposTramite', N'HabilitaTipoDeObra') IS NULL BEGIN ALTER TABLE dbo.Tra_TiposTramite ADD HabilitaTipoDeObra bit NULL; END; GO IF COL_LENGTH(N'dbo.Tra_TiposTramite', N'HabilitaLiberacionMacromedidor') IS NULL BEGIN ALTER TABLE dbo.Tra_TiposTramite ADD HabilitaLiberacionMacromedidor bit NULL; END; GO IF COL_LENGTH(N'dbo.Tra_TiposTramite', N'HabilitaRelotificacion') IS NULL BEGIN ALTER TABLE dbo.Tra_TiposTramite ADD HabilitaRelotificacion bit NULL; END; GO IF COL_LENGTH(N'dbo.Tra_TiposTramite', N'HabilitaLiberacionDeLotes') IS NULL BEGIN ALTER TABLE dbo.Tra_TiposTramite ADD HabilitaLiberacionDeLotes bit NULL; END; GO IF COL_LENGTH(N'dbo.Tra_TiposTramite', N'HabilitaLiberacionDePagosDeDerechos') IS NULL BEGIN ALTER TABLE dbo.Tra_TiposTramite ADD HabilitaLiberacionDePagosDeDerechos bit NULL; END; GO CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_EtapaCondicionesGet @CveFraccionamientoEtapa int, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY SELECT E.CveFraccionamientoEtapa, E.CveFraccionamiento, F.CveCliente, E.Etapa, E.Aprobado_Prefactibilidad, E.RequiereObrasExternas, E.TipoDeObra, E.LiberacionMacromedidor, E.Relotificacion, E.LiberacionDeLotes, E.LiberacionDePagosDeDerechos FROM dbo.FraccionamientosEtapas AS E INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = E.CveFraccionamiento WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa; IF @@ROWCOUNT = 0 BEGIN SET @ErrorMostrar = 'La etapa no existe.'; SET @ErrorTipo = 2; RETURN; END; SET @Return = 1; END TRY BEGIN CATCH SET @ErrorMostrar = 'Ocurrió un error al consultar las condiciones de la etapa; favor de contactar a Sistemas.'; SET @ErrorTipo = 1; SET @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE( ERROR_PROCEDURE(), 'PA_Fraccionamientos_EtapaCondicionesGet'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_EtapaCondicionesUpdate @CveFraccionamientoEtapa int, @Aprobado_Prefactibilidad int = -1, @RequiereObrasExternas int = -1, @TipoDeObra int = -1, @LiberacionMacromedidor int = -1, @Relotificacion int = -1, @LiberacionDeLotes int = -1, @LiberacionDePagosDeDerechos int = -1, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY IF @Aprobado_Prefactibilidad = -1 SET @Aprobado_Prefactibilidad = NULL; IF @RequiereObrasExternas = -1 SET @RequiereObrasExternas = NULL; IF @TipoDeObra = -1 SET @TipoDeObra = NULL; IF @LiberacionMacromedidor = -1 SET @LiberacionMacromedidor = NULL; IF @Relotificacion = -1 SET @Relotificacion = NULL; IF @LiberacionDeLotes = -1 SET @LiberacionDeLotes = NULL; IF @LiberacionDePagosDeDerechos = -1 SET @LiberacionDePagosDeDerechos = NULL; UPDATE E SET E.Aprobado_Prefactibilidad = @Aprobado_Prefactibilidad, E.RequiereObrasExternas = @RequiereObrasExternas, E.TipoDeObra = @TipoDeObra, E.LiberacionMacromedidor = @LiberacionMacromedidor, E.Relotificacion = @Relotificacion, E.LiberacionDeLotes = @LiberacionDeLotes, E.LiberacionDePagosDeDerechos = @LiberacionDePagosDeDerechos, E.FechaModificacion = GETDATE(), E.CveUsuario = @CveUsuarioEjecuta FROM dbo.FraccionamientosEtapas AS E INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = E.CveFraccionamiento WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa; IF @@ROWCOUNT = 0 BEGIN SET @ErrorMostrar = 'La etapa no existe.'; SET @ErrorTipo = 2; RETURN; END; SELECT E.CveFraccionamientoEtapa, E.CveFraccionamiento, F.CveCliente, E.Etapa, E.Aprobado_Prefactibilidad, E.RequiereObrasExternas, E.TipoDeObra, E.LiberacionMacromedidor, E.Relotificacion, E.LiberacionDeLotes, E.LiberacionDePagosDeDerechos FROM dbo.FraccionamientosEtapas AS E INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = E.CveFraccionamiento WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa; SET @Return = 1; END TRY BEGIN CATCH SET @ErrorMostrar = 'Ocurrió un error al guardar las condiciones de la etapa; favor de contactar a Sistemas.'; SET @ErrorTipo = 1; SET @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE( ERROR_PROCEDURE(), 'PA_Fraccionamientos_EtapaCondicionesUpdate'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO CREATE OR ALTER PROCEDURE dbo.PA_Tra_TipoTramiteList @Texto varchar(250) = NULL, @IncluirInactivos bit = 0, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY SELECT T.CveTipoTramite, T.Codigo, T.TipoTramite, T.Descripcion, T.Orden, T.EsActivo, T.HabilitaAprobado_Prefactibilidad, T.HabilitaRequiereObrasExternas, T.HabilitaTipoDeObra, T.HabilitaLiberacionMacromedidor, T.HabilitaRelotificacion, T.HabilitaLiberacionDeLotes, T.HabilitaLiberacionDePagosDeDerechos, ( SELECT COUNT(*) FROM dbo.Tra_Preguntas AS P WHERE P.CveTipoTramite = T.CveTipoTramite ) AS NumeroPreguntas FROM dbo.Tra_TiposTramite AS T WHERE (@IncluirInactivos = 1 OR T.EsActivo = 1) AND ( NULLIF(LTRIM(RTRIM(@Texto)), '') IS NULL OR T.Codigo LIKE '%' + @Texto + '%' OR T.TipoTramite LIKE '%' + @Texto + '%' OR T.Descripcion LIKE '%' + @Texto + '%' ) ORDER BY T.Orden, T.TipoTramite; SET @Return = 1; END TRY BEGIN CATCH SET @ErrorMostrar = 'Ocurrió un error al consultar los tipos de trámite; favor de contactar a Sistemas.'; SET @ErrorTipo = 1; SET @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE( ERROR_PROCEDURE(), 'PA_Tra_TipoTramiteList'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO CREATE OR ALTER PROCEDURE dbo.PA_Tra_TipoTramiteGet @CveTipoTramite int, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY SELECT T.CveTipoTramite, T.Codigo, T.TipoTramite, T.Descripcion, T.Orden, T.EsActivo, T.HabilitaAprobado_Prefactibilidad, T.HabilitaRequiereObrasExternas, T.HabilitaTipoDeObra, T.HabilitaLiberacionMacromedidor, T.HabilitaRelotificacion, T.HabilitaLiberacionDeLotes, T.HabilitaLiberacionDePagosDeDerechos, ( SELECT COUNT(*) FROM dbo.Tra_Preguntas AS P WHERE P.CveTipoTramite = T.CveTipoTramite ) AS NumeroPreguntas FROM dbo.Tra_TiposTramite AS T WHERE T.CveTipoTramite = @CveTipoTramite; SET @Return = 1; END TRY BEGIN CATCH SET @ErrorMostrar = 'Ocurrió un error al consultar el tipo de trámite; favor de contactar a Sistemas.'; SET @ErrorTipo = 1; SET @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE( ERROR_PROCEDURE(), 'PA_Tra_TipoTramiteGet'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO CREATE OR ALTER PROCEDURE dbo.PA_Tra_TipoTramiteSave @CveTipoTramite int = NULL, @Codigo varchar(50), @TipoTramite varchar(200), @Descripcion varchar(500) = NULL, @EsActivo bit, @HabilitaAprobado_Prefactibilidad int = -1, @HabilitaRequiereObrasExternas int = -1, @HabilitaTipoDeObra int = -1, @HabilitaLiberacionMacromedidor int = -1, @HabilitaRelotificacion int = -1, @HabilitaLiberacionDeLotes int = -1, @HabilitaLiberacionDePagosDeDerechos int = -1, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY IF @HabilitaAprobado_Prefactibilidad = -1 SET @HabilitaAprobado_Prefactibilidad = NULL; IF @HabilitaRequiereObrasExternas = -1 SET @HabilitaRequiereObrasExternas = NULL; IF @HabilitaTipoDeObra = -1 SET @HabilitaTipoDeObra = NULL; IF @HabilitaLiberacionMacromedidor = -1 SET @HabilitaLiberacionMacromedidor = NULL; IF @HabilitaRelotificacion = -1 SET @HabilitaRelotificacion = NULL; IF @HabilitaLiberacionDeLotes = -1 SET @HabilitaLiberacionDeLotes = NULL; IF @HabilitaLiberacionDePagosDeDerechos = -1 SET @HabilitaLiberacionDePagosDeDerechos = NULL; SELECT @Codigo = LTRIM(RTRIM(@Codigo)), @TipoTramite = LTRIM(RTRIM(@TipoTramite)), @Descripcion = NULLIF(LTRIM(RTRIM(@Descripcion)), ''); IF NULLIF(@Codigo, '') IS NULL OR NULLIF(@TipoTramite, '') IS NULL BEGIN SET @ErrorMostrar = 'Capture el código y el nombre del tipo de trámite.'; SET @ErrorTipo = 2; RETURN; END; IF EXISTS ( SELECT 1 FROM dbo.Tra_TiposTramite WHERE Codigo = @Codigo AND CveTipoTramite <> ISNULL(@CveTipoTramite, 0) ) BEGIN SET @ErrorMostrar = 'El código del tipo de trámite ya está registrado.'; SET @ErrorTipo = 2; RETURN; END; IF @CveTipoTramite IS NULL BEGIN DECLARE @Orden int; SELECT @Orden = ISNULL(MAX(Orden), 0) + 1 FROM dbo.Tra_TiposTramite; INSERT INTO dbo.Tra_TiposTramite ( Codigo, TipoTramite, Descripcion, Orden, EsActivo, HabilitaAprobado_Prefactibilidad, HabilitaRequiereObrasExternas, HabilitaTipoDeObra, HabilitaLiberacionMacromedidor, HabilitaRelotificacion, HabilitaLiberacionDeLotes, HabilitaLiberacionDePagosDeDerechos, CveUsuario ) VALUES ( @Codigo, @TipoTramite, @Descripcion, @Orden, @EsActivo, @HabilitaAprobado_Prefactibilidad, @HabilitaRequiereObrasExternas, @HabilitaTipoDeObra, @HabilitaLiberacionMacromedidor, @HabilitaRelotificacion, @HabilitaLiberacionDeLotes, @HabilitaLiberacionDePagosDeDerechos, @CveUsuarioEjecuta ); SET @CveTipoTramite = CONVERT(int, SCOPE_IDENTITY()); END ELSE BEGIN UPDATE dbo.Tra_TiposTramite SET Codigo = @Codigo, TipoTramite = @TipoTramite, Descripcion = @Descripcion, EsActivo = @EsActivo, HabilitaAprobado_Prefactibilidad = @HabilitaAprobado_Prefactibilidad, HabilitaRequiereObrasExternas = @HabilitaRequiereObrasExternas, HabilitaTipoDeObra = @HabilitaTipoDeObra, HabilitaLiberacionMacromedidor = @HabilitaLiberacionMacromedidor, HabilitaRelotificacion = @HabilitaRelotificacion, HabilitaLiberacionDeLotes = @HabilitaLiberacionDeLotes, HabilitaLiberacionDePagosDeDerechos = @HabilitaLiberacionDePagosDeDerechos, FechaModificacion = GETDATE(), CveUsuario = @CveUsuarioEjecuta WHERE CveTipoTramite = @CveTipoTramite; END; SELECT @CveTipoTramite AS CveTipoTramite; SET @Return = 1; END TRY BEGIN CATCH SET @ErrorMostrar = 'Ocurrió un error al guardar el tipo de trámite; favor de contactar a Sistemas.'; SET @ErrorTipo = 1; SET @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE( ERROR_PROCEDURE(), 'PA_Tra_TipoTramiteSave'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO CREATE OR ALTER PROCEDURE dbo.PA_Tramites_ActualizarTramites @CveSolicitud int, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY -- Plantilla para activar automáticamente otro trámite en la misma etapa. -- Se deja comentada hasta definir las condiciones y el tipo de trámite. -- -- INSERT INTO dbo.Tra_Solicitudes -- ( -- Folio, -- CveCliente, -- CveFraccionamiento, -- CveFraccionamientoEtapa, -- CveTipoTramite, -- CveEstatusSolicitud, -- CveUsuarioSolicita, -- FechaInicio -- ) -- SELECT -- CONCAT('ET', S.CveFraccionamientoEtapa, '-TR', T.CveTipoTramite), -- S.CveCliente, -- S.CveFraccionamiento, -- S.CveFraccionamientoEtapa, -- T.CveTipoTramite, -- E.CveEstatusSolicitud, -- @CveUsuarioEjecuta, -- GETDATE() -- FROM dbo.Tra_Solicitudes AS S -- CROSS JOIN dbo.Tra_TiposTramite AS T -- CROSS APPLY -- ( -- SELECT TOP (1) ES.CveEstatusSolicitud -- FROM dbo.Tra_EstatusSolicitud AS ES -- WHERE ES.Orden = 1 -- AND ES.EsActivo = 1 -- ORDER BY ES.CveEstatusSolicitud -- ) AS E -- WHERE S.CveSolicitud = @CveSolicitud -- AND T.CveTipoTramite = 0 -- AND NOT EXISTS -- ( -- SELECT 1 -- FROM dbo.Tra_Solicitudes AS SA -- WHERE SA.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa -- AND SA.CveTipoTramite = T.CveTipoTramite -- ); SELECT 1 AS Resultado; SET @Return = 1; END TRY BEGIN CATCH SET @ErrorMostrar = 'Ocurrió un error al actualizar los trámites; favor de contactar a Sistemas.'; SET @ErrorTipo = 1; SET @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE( ERROR_PROCEDURE(), 'PA_Tramites_ActualizarTramites'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO IF OBJECT_ID(N'dbo.Bit_Tablas', N'U') IS NOT NULL AND OBJECT_ID(N'dbo.Bit_Campos', N'U') IS NOT NULL BEGIN DECLARE @Campos TABLE ( NombreTablaSQL varchar(128) COLLATE Modern_Spanish_CS_AS NOT NULL, NombreCampoSQL varchar(128) COLLATE Modern_Spanish_CS_AS NOT NULL, NombreMostrar varchar(150) COLLATE Modern_Spanish_CS_AS NOT NULL ); INSERT INTO @Campos ( NombreTablaSQL, NombreCampoSQL, NombreMostrar ) VALUES ('FraccionamientosEtapas', 'Aprobado_Prefactibilidad', 'Aprobado en prefactibilidad'), ('FraccionamientosEtapas', 'RequiereObrasExternas', 'Requiere obras externas'), ('FraccionamientosEtapas', 'TipoDeObra', 'Tipo de obra'), ('FraccionamientosEtapas', 'LiberacionMacromedidor', 'Liberación de macromedidor'), ('FraccionamientosEtapas', 'Relotificacion', 'Relotificación'), ('FraccionamientosEtapas', 'LiberacionDeLotes', 'Liberación de lotes'), ('FraccionamientosEtapas', 'LiberacionDePagosDeDerechos', 'Liberación de pagos de derechos'), ('Tra_TiposTramite', 'HabilitaAprobado_Prefactibilidad', 'Habilita aprobado en prefactibilidad'), ('Tra_TiposTramite', 'HabilitaRequiereObrasExternas', 'Habilita requiere obras externas'), ('Tra_TiposTramite', 'HabilitaTipoDeObra', 'Habilita tipo de obra'), ('Tra_TiposTramite', 'HabilitaLiberacionMacromedidor', 'Habilita liberación de macromedidor'), ('Tra_TiposTramite', 'HabilitaRelotificacion', 'Habilita relotificación'), ('Tra_TiposTramite', 'HabilitaLiberacionDeLotes', 'Habilita liberación de lotes'), ('Tra_TiposTramite', 'HabilitaLiberacionDePagosDeDerechos', 'Habilita liberación de pagos de derechos'); UPDATE C SET C.NombreMostrar = S.NombreMostrar, C.MostrarEnBitacora = 1, C.TipoDatoSQL = TY.name COLLATE Modern_Spanish_CS_AS, C.Activo = 1, C.FechaMod = GETDATE() FROM dbo.Bit_Campos AS C INNER JOIN dbo.Bit_Tablas AS T ON T.CveTabla = C.CveTabla INNER JOIN @Campos AS S ON S.NombreTablaSQL = T.NombreTablaSQL AND S.NombreCampoSQL = C.NombreCampoSQL INNER JOIN sys.tables AS ST ON ST.name COLLATE Modern_Spanish_CS_AS = S.NombreTablaSQL AND SCHEMA_NAME(ST.schema_id) = 'dbo' INNER JOIN sys.columns AS CO ON CO.object_id = ST.object_id AND CO.name COLLATE Modern_Spanish_CS_AS = S.NombreCampoSQL INNER JOIN sys.types AS TY ON TY.user_type_id = CO.user_type_id; INSERT INTO dbo.Bit_Campos ( CveTabla, NombreCampoSQL, NombreMostrar, MostrarEnBitacora, TipoDatoSQL, Activo ) SELECT T.CveTabla, S.NombreCampoSQL, S.NombreMostrar, 1, TY.name COLLATE Modern_Spanish_CS_AS, 1 FROM @Campos AS S INNER JOIN dbo.Bit_Tablas AS T ON T.NombreTablaSQL = S.NombreTablaSQL INNER JOIN sys.tables AS ST ON ST.name COLLATE Modern_Spanish_CS_AS = S.NombreTablaSQL AND SCHEMA_NAME(ST.schema_id) = 'dbo' INNER JOIN sys.columns AS CO ON CO.object_id = ST.object_id AND CO.name COLLATE Modern_Spanish_CS_AS = S.NombreCampoSQL INNER JOIN sys.types AS TY ON TY.user_type_id = CO.user_type_id WHERE NOT EXISTS ( SELECT 1 FROM dbo.Bit_Campos AS C WHERE C.CveTabla = T.CveTabla AND C.NombreCampoSQL = S.NombreCampoSQL ); END; GO