Store Procedure - Fechas Programadas


Este pequeño store procedure crea fechas programadas para ejecutar procesos y funciona mediante 2 catalogos , podria hacerlo desde uno pero en mi caso me es más facil entenderlo así, espero sea de gran utilidad para ti como para mi.

Archivos

Uso

  • Crear las tablas
  • Inicializar el catalogo de cat_PeriodDays(La fecha fin iniciarla a partir del día en que se quiere comenzar) el store procedure creara los registros a un año posterior a esta fecha ingresada.
  •     
         insert into cat_PeriodDays(7,20180101,20180101,1,getdate(),null);
        
  • Ejecutar Store Procedure

Resultado

Catalogo Periodo

  
     USE [devel]
     GO

     SET ANSI_NULLS ON
     GO

     SET QUOTED_IDENTIFIER ON
     GO

     SET ANSI_PADDING ON
     GO

     CREATE TABLE [dbo].[cat_PeriodDays](
       [idPeriodDays] [int] IDENTITY(1,1) NOT NULL,
       [DaysPeriod] [int] NOT NULL,
       [FechaIni] [date] NOT NULL,
       [FechaFin] [date] NOT NULL,
       [Description] [varchar](100) NOT NULL,
       [Activo] [bit] NOT NULL,
       [FechaInsercion] [datetime] NOT NULL,
       [FechaActualizacion] [datetime] NULL,
     CONSTRAINT [PK_cat_PeriodDays] PRIMARY KEY CLUSTERED 
     (
       [idPeriodDays] ASC
     )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
     ) ON [PRIMARY]

     GO

     SET ANSI_PADDING OFF
     GO

     

Tabla de Reporte

  
     USE [devel]
     GO
     
     SET ANSI_NULLS ON
     GO
     
     SET QUOTED_IDENTIFIER ON
     GO
     
     CREATE TABLE [dbo].[tbl_EntregaReporte](
       [idEntregaReporte] [int] IDENTITY(1,1) NOT NULL,
       [FechaIni] [datetime] NOT NULL,
       [FechaFin] [datetime] NOT NULL,
       [Entregado] [bit] NOT NULL,
       [Activo] [bit] NOT NULL,
       [FechaInsercion] [datetime] NOT NULL,
       [FechaActualizacion] [datetime] NULL,
      CONSTRAINT [PK_tbl_EntregaReporte] PRIMARY KEY CLUSTERED 
     (
       [idEntregaReporte] ASC
     )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
     ) ON [PRIMARY]
     
     GO
     
     

Store Procedure

  
     USE [devel]
     GO

     SET ANSI_NULLS ON
     GO

     SET QUOTED_IDENTIFIER ON
     GO

     CREATE PROCEDURE [dbo].[sp_InsertDatesEntregaRep]

     AS

     DECLARE @FechaFin date,
         @Days int,
         @FechaMas1Anio date,
         @FechaInicioSemana date,
         @idPeriodDays int
         

     BEGIN/*StoreProcedure*/
     SET @idPeriodDays =(SELECT IdPeriodDays FROM cat_PeriodDays WHERE Activo = 1)
     SET @Days = (SELECT DaysPeriod FROM cat_PeriodDays where  IdPeriodDays = @idPeriodDays)
     SET @FechaFin = (SELECT FechaFin FROM cat_PeriodDays where IdPeriodDays = @idPeriodDays)
     SET @FechaMas1Anio = DATEADD(YEAR,1,GETDATE())

     WHILE (@FechaFin < @FechaMas1Anio)
     BEGIN--While
     SET @FechaInicioSemana = @FechaFin
     SET @FechaFin = DATEADD(DAY,@Days,@FechaFin)
     
     INSERT INTO tbl_EntregaReporte (FechaIni,FechaFin,Entregado,Activo,FechaInsercion,FechaActualizacion) 
                   values(@FechaInicioSemana,@FechaFin,False,True,GETDATE(),Null);

     SET @FechaFin = (SELECT max(FechaFin) FROM tbl_EntregaReporte)

     UPDATE cat_PeriodDays SET FechaFin = @FechaFin where IdPeriodDays = @idPeriodDays;

     END--While
             
     END/*StoreProcedure*/

     GO