1 benannt wird: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 6: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129:
CREATE Verfahren [dbo]. [xPLT_WTAAbsenceSpanNPD] ( @p_BeginDate Datum/Uhrzeit, @p_EndDate Datum/Uhrzeit ) wie /* Diese Version - 1.0 Ver 1.0 - Verursacht pro U0158 zur Unterstützung der auf ein Jahr bezogenen Stunden 23/06/2009 * erklären @w_RetCode int, @w_RetStatus int, @w_RetMsg varchar (255), @r_PrevWorkDay Datum/Uhrzeit, @r_NextWorkDay Datum/Uhrzeit, @w_EmployeeID Putzfrau (6), @w_EmployeeCode int, @w_NPDDay Datum/Uhrzeit auserwählt @w_RetCode = 0 emp_cur CURSOR für erklären vorwählen eiv.EmployeeID, tsd.EMPLOYEECODE, tsd.ADMINISTRATIONDATE von dbo.xPLT_EmpInfo_Vw eiv mit (nolock) inner dbo.TIMESUMMARYDAY tsd mit verbinden (nolock) auf eiv.EmployeeCode = tsd.EmployeeCode wo tsd.ADMINISTRATIONDATE zwischen @p_BeginDate und @p_EndDate und tsd.DAILYPATTERNCODE = 68206 und -- Nichtvorlegung tsd.STANDARDMINSINDAILYPATTERN = 0 und existiert (auserwählt * von dbo.TIMESUMMARYDAY mit (nolock) wo EmployeeCode = tsd.EmployeeCode und AdministrationDate zwischen dateadd (wk, -3, @p_BeginDate) und dateadd (wk, +3, @p_EndDate) und STANDARDMINSINDAILYPATTERN > 0 und STANDARDMINUTESACHIEVED = 0) -- nur überprüfen, ob vielleicht relevante Tagabwesenheiten innerhalb des „Fensters“ Auftrag vorbei eiv.EmployeeID, tsd.ADMINISTRATIONDATE für nur gelesen Tabelle #tmp9001 herstellen ( EmployeeID Putzfrau (6), NPDDay Datum/Uhrzeit, PrevWorkDayAbs Datum/Uhrzeit, NextWorkDayAbs Datum/Uhrzeit ) emp_cur öffnen zunächst vom emp_cur in @w_EmployeeID, das @w_EmployeeCode holen, @w_NPDDay wenn @@fetch_status <> 0 Goto- end_ret -- keine qualifizierenden Daten zum Prozess während @@fetch_status = 0 anfangen -- Cursor-Schleife -- die vorhergehenden u. folgenden Arbeitstage feststellen exec @w_RetStatus = dbo.xPLT_PrevNextWorkDay @w_EmployeeId, @w_NPDDay, 0, @r_PrevWorkDay Ausgang, @r_NextWorkDay Ausgang wenn @w_RetStatus <> 0 anfangen @w_RetMsg vorwählen = „xPLT_WTAAbsenceSpanNPD: zu xPLT_PrevNextWorkDay ausfallen mit Return-Code benennen: “ + Bekehrter (Putzfrau (1), @w_RetStatus) raiserror („%s“, 18.1, @w_RetMsg) @w_RetCode vorwählen = 1 Goto- end_ret Ende -- auf Tagabwesenheit an den vorhergehenden u. folgenden Arbeitstagen prüfen wenn ( auserwählt Zählimpuls (*) von dbo.TIMESUMMARYDAY tsd mit (nolock) wo tsd.EMPLOYEECODE = @w_EmployeeCode und (tsd.ADMINISTRATIONDATE = @r_PrevWorkDay oder tsd.ADMINISTRATIONDATE = @r_NextWorkDay) und tsd.STANDARDMINSINDAILYPATTERN > 0 und tsd.STANDARDMINUTESACHIEVED = 0 ) = 2 anfangen in #tmp9001 (EmployeeID, NPDDay, PrevWorkDayAbs, NextWorkDayAbs) einsetzen Werte (@w_EmployeeID, @w_NPDDay, @r_PrevWorkDay, @r_NextWorkDay) Ende zunächst vom emp_cur in @w_EmployeeID, das @w_EmployeeCode holen, @w_NPDDay Ende -- Cursor-Schleife -- Rückholresultset auserwählt t1.*, eiv. Familienname, eiv. Vornamen, eiv. Mitte, eiv. Mannschaft von T1 #tmp9001 inner dbo.xPLT_EmpInfo_Vw eiv sich anschließen auf SORTIEREN t1.EmployeeID = eiv.EmployeeID Latin1_General_CI_AS Auftrag vorbei t1.EmployeeID, t1.NPDDay end_ret: nahes emp_cur emp_cur freigeben Tabelle #tmp9001 fallenlassen @w_RetCode zurückbringen GEHEN
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 6: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168:
--NEUE CURSOR-RESULTATE erklären @w_RetCode int, @w_RetStatus int, @w_RetMsg varchar (255), @r_PrevWorkDay Datum/Uhrzeit, @r_NextWorkDay Datum/Uhrzeit, @w_EmployeeID Putzfrau (6), @w_EmployeeCode int, @w_NPDDay Datum/Uhrzeit, @p_BeginDate Datum/Uhrzeit, @p_EndDate Datum/Uhrzeit @w_RetCode vorwählen = 0 @p_BeginDate vorwählen = „08/01/10“ @p_EndDate vorwählen = „08/10/10“ ERKLÄREN @TMP_BeginDate Datum/Uhrzeit, @TMP_EndDate Datum/Uhrzeit @TMP_BeginDate = DATEADD (wk, -3, @p_BeginDate) EINSTELLEN @TMP_EndDate = DATEADD (wk, +3, @p_EndDate) EINSTELLEN @TSD TABELLE (CNT [int] ERKLÄREN NICHT UNGÜLTIG, [EMPLOYEECODE] [int] NICHT NULL, [ADMINISTRATIONDATE] [Datum/Uhrzeit] NULL, [DAILYPATTERNCODE] [int] NULL, [STANDARDMINSINDAILYPATTERN] [smallint] NULL, [STANDARDMINUTESACHIEVED] [smallint] NICHT NULL) IN @TSD EINSETZEN CNT VORWÄHLEN , EMPLOYEECODE , ADMINISTRATIONDATE , DAILYPATTERNCODE , STANDARDMINSINDAILYPATTERN , STANDARDMINUTESACHIEVED VON dbo.TIMESUMMARYDAY WO DAILYPATTERNCODE = 68206 UND ADMINISTRATIONDATE ZWISCHEN @TMP_BEGINDATE UND @TMP_ENDDATE LÖSCHUNG VOM @TSD WO (STANDARDMINSINDAILYPATTERN = 0 UND STANDARDMINUTESACHIEVED <> 0) @EMP TABELLE ERKLÄREN ( [EmployeeId] [varchar] (15) NICHT NULL, [EmployeeCode] [int] NULL, [Familienname] [varchar] (40) NULL, [Vornamen] [varchar] (40) NULL, [Mannschaft] [varchar] (16) NULL, [Mitte] [varchar] (5) NULL) EINSATZ IN @EMP EmployeeId VORWÄHLEN , EmployeeCode , Familienname , Vornamen , Mitte , Mannschaft VON dbo.xPLT_EmpInfo WO Active > 0 Emp_cur CURSOR für ERKLÄREN VORWÄHLEN eiv.EmployeeID, tsd.EMPLOYEECODE, tsd.ADMINISTRATIONDATE Vom @EMP eiv inner @TSD tsd sich anschließen auf eiv.EmployeeCode = tsd.EmployeeCode WO tsd.ADMINISTRATIONDATE zwischen @p_BeginDate und @p_EndDate und tsd.STANDARDMINSINDAILYPATTERN = 0 TABELLE #TMP9001 HERSTELLEN ( EmployeeID Putzfrau (6), NPDDay Datum/Uhrzeit, PrevWorkDayAbs Datum/Uhrzeit, NextWorkDayAbs Datum/Uhrzeit ) emp_cur öffnen zunächst vom emp_cur in @w_EmployeeID, das @w_EmployeeCode holen, @w_NPDDay wenn @@fetch_status <> 0 Goto- end_ret -- keine qualifizierenden Daten zum Prozess während @@fetch_status = 0 anfangen -- Cursor-Schleife -- die vorhergehenden u. folgenden Arbeitstage feststellen exec @w_RetStatus = dbo.xPLT_PrevNextWorkDay @w_EmployeeId, @w_NPDDay, 0, @r_PrevWorkDay Ausgang, @r_NextWorkDay Ausgang wenn @w_RetStatus <> 0 anfangen @w_RetMsg vorwählen = „xPLT_WTAAbsenceSpanNPD: zu xPLT_PrevNextWorkDay ausfallen mit Return-Code benennen: “ + Bekehrter (Putzfrau (1), @w_RetStatus) raiserror („%s“, 18.1, @w_RetMsg) @w_RetCode vorwählen = 1 Goto- end_ret Ende -- auf Tagabwesenheit an den vorhergehenden u. folgenden Arbeitstagen prüfen wenn ( auserwählt Zählimpuls (*) von @TSD tsd wo tsd.EMPLOYEECODE = @w_EmployeeCode und (tsd.ADMINISTRATIONDATE = @r_PrevWorkDay oder tsd.ADMINISTRATIONDATE = @r_NextWorkDay) und tsd.STANDARDMINSINDAILYPATTERN > 0 und tsd.STANDARDMINUTESACHIEVED = 0 ) = 2 anfangen in #tmp9001 (EmployeeID, NPDDay, PrevWorkDayAbs, NextWorkDayAbs) einsetzen Werte (@w_EmployeeID, @w_NPDDay, @r_PrevWorkDay, @r_NextWorkDay) Ende zunächst vom emp_cur in @w_EmployeeID, das @w_EmployeeCode holen, @w_NPDDay Ende -- Cursor-Schleife -- Rückholresultset auserwählt t1.*, eiv. Familienname, eiv. Vornamen, eiv. Mitte, eiv. Mannschaft von T1 #tmp9001 inner dbo.xPLT_EmpInfo_Vw eiv sich anschließen auf SORTIEREN t1.EmployeeID = eiv.EmployeeID Latin1_General_CI_AS Auftrag vorbei t1.EmployeeID, t1.NPDDay --* von T1 #tmp9001 vorwählen end_ret: nahes emp_cur emp_cur freigeben Tabelle #tmp9001 fallenlassen --@w_RetCode zurückbringen @w_RetCode vorwählen GEHEN