Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Duda con condicional

Estas en el tema de Duda con condicional en el foro de SQL Server en Foros del Web. Este es el mensaje: Hola muy buenas, tengo una duda final con el procedimiento almacenado, necesito que se compruebe si al día siguiente es festivo. ...
  #1 (permalink)  
Antiguo 17/01/2012, 07:51
 
Fecha de Ingreso: abril-2010
Mensajes: 50
Antigüedad: 14 años
Puntos: 2
Duda con condicional

Este es el mensaje:

Hola muy buenas, tengo una duda final con el procedimiento almacenado, necesito que se compruebe si al día siguiente es festivo. Para comprobarlo utilizo o quiero utilizar las sentencias:

SELECT (((@@datefirst-1) + datepart(weekday, GETDATE()) + 1 )) % 7) AS NUMERO_DIA_SEMANA) = 6

SELECT (((@@datefirst-1) + datepart(weekday, GETDATE()) + 1 )) % 7) AS NUMERO_DIA_SEMANA) = 0 -> estas dos sentencias me dicen si es sábado o domingo.

Para el resto de festivos utilizo una tabla, en la tabla, hay campos de día y de mes, el mes viene como cadena, entonces utilizo una función que me saca el número del mes -> SELECT FROM fabFestivosAnuales
WHERE mes = OrdinalMes(DATEPART(month, CAST((GETDATE()) + 1 AS INT)))
and dia = CAST(day(GETDATE()) + 1 AS INT)


Mi problema reside en que tengo que crear un bucle que englobe esas 3 condiciones, son dos OR, while condición1 =true or condición2 = true OR
condición3 tiene registros then

enviar correo.

Cuando se haya enviado todos los correos para ese día, se tiene que comprobar el siguiente día. Es decir, necesito que la condición en lugar de tener un getdate() + 1, tenga una variable que tenga el valor del getdate() + 1, pero que se incremente cada vez que se haga el envío de correos. El bucle debe parar cuando
no se cumpla ninguna de las tres condiciones, es decir,

mañana es festivo? sí, envío correos,
pasado es festivo? envío correos,
dentro de dos días es festivo? No, no se envía nada.

Por favor alguien puede ayudarme para crear ese bucle, o algún ejemplo parecido? Muchas gracias de antemano por cualquier ayuda.

Fin mensaje
  #2 (permalink)  
Antiguo 17/01/2012, 13:18
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Duda con condicional

No solo es una condicion, hay que tomar en cuenta que cuando programas en TSQL no se debe hacer pensando en ciclos sino en conjuntos...

Suponiendo que se tienen las sigs tablas:

Empleados

#DIAS_EN_RANGO - una tabla con los dias a procesar dentro del rango deseado, por ejemplo fecha actual mas 7 dias (en ella se incluye el date part para saber si es fin de semana).

#DiasFestivos - Una tabla con los dias marcados como festivos.


Para obtener el conjunto de IDs de empleados a notificar podriamos hacer un select como este:

Código:
INSERT INTO #IDS_EMPS(ID)
SELECT   E.ID
FROM   #Empleados E
INNER JOIN
       #DIAS_EN_RANGO R
ON     E.FechaCumple = R.FECHA
LEFT JOIN
		#DiasFestivos D
ON     E.FechaCumple = D.Fecha
WHERE  E.Notificado = 0
	   AND (  
			  --------------------------------------------------------------------
			  -- Los que cumplen hoy 
			  --------------------------------------------------------------------
			  E.FechaCumple = @CURRENT_DATE  
			  --------------------------------------------------------------------
			  -- Los que cumplen en dia feriado o 
			  -- en fin de semana y no hay otro dia habil
			  --------------------------------------------------------------------
			 OR (
			        E.FechaCumple <> @CURRENT_DATE                       -- cumplen en dias posteriores
			        AND (D.Fecha IS NOT NULL OR R.DATE_PART IN (6,7) )   -- ademas es inhabil o fin
			     )  
			 
			 )

** Ya con la lista de Ids en una temporal puedes recorrerlo uno por uno para obtener la info correspondiente para el envio de cada notificacion...

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Etiquetas: condicional, registro, select, tabla, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:25.