2012-02-14 9 views
5

Esta tabla: sysschedules¿Cómo se calculan los intervalos sysschedules de SQL Server?

Si el freq_type es 8 (semanal), entonces freq_interval es 1,2,4,8,16,32,64 para Su, M, T, W, Th, F, S.

Pero cuando freq_type es 32 (pariente mensual) entonces freq_interval es 1,2,3,4,5,6,7,8,9,10 para Su, M, T, W, Th, F, S, día de la semana, fin de semana

¿Por qué es esto? ¿Existe algún tipo de cálculo para reducir la complejidad de la consulta?

Si es así, ¿cómo? (Sry si sueno ni idea, la construcción de un sistema de eventos se repite es la fusión de mi cerebro)

Respuesta

5

Si freq_type es 8, entonces el trabajo se puede producir en uno o más días - por lo que es necesario que haya una manera de representar varios días en la columna freq_interval. Esto se hace asignando cada día una potencia de dos valores, por lo que se pueden agregar varios valores sin ambigüedades. P.ej. para algo que ocurre los lunes, miércoles y viernes, el valor sería 2 + 8 + 32 = 42. (Su pregunta tiene los valores incorrectos asignados a los días)

Si freq_type es 32, entonces solo una opción puede seleccionar - uno día de la semana, o día, día laborable o fin de semana. Dado que los valores múltiples no se pueden combinar con, se puede usar una representación más simple.

+0

Así que una consulta para obtener todos los eventos en un martes podría ser SELECCIONADA * FROM EventTable WHERE freq_interval = [3 o 4]? Porque 3 si freq_type es 32, 4 si es 8. ¿Correcto? – Chaddeus

+1

Para que todos los eventos ocurran un martes, debe consultar 'WHERE (freq_type = 32 AND freq_interval = 3) O (freq_type = 8 AND freq_interval & 4 = 4)'. Usted * no debería * intentar consultar 'freq_interval' sin considerar también' freq_type'. –

+0

Genial, eso tiene perfecto sentido. ¿Cómo se representan los eventos que ocurren una vez cada dos martes (cada 2 semanas) con este modelo? Quizás 'WHERE (freq_type = 32 AND freq_interval = 3 AND freq_relative_interval = 5)'? freq_relative_interval 1 = Primero y 4 = Tercero. (Después de tipear todo esto, parece que esto no responderá la pregunta. En cambio, solo regresa cada primer y tercer martes ...). Hmm ... – Chaddeus

Cuestiones relacionadas