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);
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