SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER OFF GO /* =========================================================================================================== ** ** WPB Eindhoven ** HVL, TBI Techniek ** =========================================================================================================== ** Stored procedure : lp_lp_ReadRapVal ** Revisie : 07-08-2007 HVL R.M.W.Jansen Origineel ** ** Parameters : Periode De op te zoeken periode dag-week-maand-jaar ** @PeriodeDate De gewenste rapportage periode ** Omschrijving : Deze stored procedure wordt vanuit SCADA aangeroepen ** ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ CREATE PROCEDURE dbo.lp_ReadRapVal (@Periode int,@PeriodeDate varchar (20) ) AS DECLARE @BeginT AS integer, @EindeT AS INTEGER, @BeginVal as integer, @EindVal as integer DECLARE @StartTime as DATETIME,@EindTime as DATETIME, @ExtraTime As DATETIME --HD:HuidigeDag,VorigeDag DECLARE @Variabele nvarchar(30) DECLARE @weeknr as int,@jaar AS VARCHAR(20),@dow as int,@x as int DECLARE @BeginDatum as datetime,@EindDatum as datetime -- Variabele met foutnummer dient als returnwaarde. DECLARE @Foutnummer int SET @Foutnummer = 0 -- Initiëel nul SET DATEFIRST 1 --==================================================================================================================================== -- Aanmaak /Kontrole of tijdelijke tabel bestaat : zo ja leeg maken,zo nee : aanmaken --- -- Tijdelijke tabel tbv aanmaak diverse rapportage gegevens aanmaken/leegmaken EXECUTE lp_DeleteTblRappTmp --==================================================================================================================================== --- Bepaal startdatum periode IF @Periode =1 -- Dag : Vorige GEHELE dag BEGIN SELECT @ExtraTime = CONVERT(datetime,(@PeriodeDate + ' 00:10:00'),110) SELECT @EindTime = DATEADD(day,1,@ExtraTime) SELECT @ExtraTime = CONVERT(datetime,(@PeriodeDate + ' 00:00:00'),110) SELECT @StartTime = DATEADD(day,0,@ExtraTime) END IF @Periode =2 -- Week -- De eerste gegevens van een week staan om ca. 00:00:51 maandagochtend in tabel tblRappLog -- De laatse gegevens van een week staan om ca. 00:00:51 maandagochtend VAN DE VOLGENDE WEEK!! in tabel tblRappLog BEGIN SELECT @ExtraTime = CONVERT(datetime,(@PeriodeDate + ' 00:00:00'),110) IF DATEPART(dw, @ExtraTime) = 1 -- 1:Maandag BEGIN SELECT @ExtraTime= DATEADD(DAY,-7,@ExtraTime) END --PRINT @ExtraTime SELECT @weeknr = DATEPART(WEEK, @ExtraTime) --PRINT @weeknr SELECT @dow= DATEPART(DW, @ExtraTime) --PRINT @dow SELECT @StartTime = DATEADD(DAY,-(@dow-1),@ExtraTime) --print @StartTime SELECT @EindTime = DATEADD(DAY,7,@StartTime) SELECT @EindTime =DATEADD(MI,5,@EindTime) --PRINT @EindTime END IF @Periode =3 -- Maand BEGIN SELECT @ExtraTime = CONVERT(datetime,(@PeriodeDate + ' -01 00:00:00'),110) SELECT @x = DATEPART(DAY,@ExtraTime) SELECT @StartTime = DATEADD(DAY,-(@x-1),@ExtraTime) SELECT @EindTime = dateadd(month,1,@StartTime) SELECT @EindTime =DATEADD(MI,5,@EindTime) END IF @Periode =4 --Jaar BEGIN --SELECT @ExtraTime = CONVERT(datetime,(@PeriodeDate + ' -01-01 00:00:00'),110) SELECT @jaar = DATEPART(year,@PeriodeDate) --SELECT @StartTime = CONVERT(datetime,('01-01-' + @jaar + ' 00:00:00'),110) SELECT @StartTime = CONVERT(datetime,(@PeriodeDate + ' -01-01 00:00:00'),110) SELECT @EindTime = dateadd(year,1,@StartTime) SELECT @EindTime =DATEADD(MI,5,@EindTime) END -- Bepaal begin- en eindtijdstip van de periode SET @BeginT = (SELECT MIN(FLTIME) FROM dbo.tblRappLog WHERE (Tijdstip >=@StartTime AND Tijdstip <=@EindTime) ) SET @EindeT = (SELECT MAX(FLTIME) FROM dbo.tblRappLog WHERE (Tijdstip >=@StartTime AND Tijdstip <=@EindTime) ) SELECT @StartTime = CONVERT(datetime,(@StartTime ),105) SELECT @EindTime = CONVERT(datetime,(@EindTime ),105) INSERT INTO TblRappPeriode(BeginDMY, EindDMY) -- Voeg toe aan tijdelijke tabel VALUES (@StartTime,@EindTime) -- Cursor declareren voor de kolomnamen welke voor de rapportage gelogd worden DECLARE Variabelen CURSOR FOR select name from syscolumns where id = (select id from sysobjects where name = 'tblRappLog') AND syscolumns.name <> 'FLTIME' AND syscolumns.name <> 'Tijdstip' order by syscolumns.name ASC OPEN Variabelen FETCH NEXT FROM Variabelen -- Eerste waarden ophalen INTO @Variabele WHILE @@FETCH_STATUS = 0 BEGIN DECLARE @SQLString nvarchar(500); DECLARE @ParmDefinition nvarchar(500); SET @SQLString = N'SELECT @BeginVall = ' + @Variabele + ' FROM tblRappLog WHERE FLTIME = @BeginTT'; SET @ParmDefinition = N'@BeginTT int, @BeginVall int OUTPUT'; EXECUTE sp_executesql @SQLString, @ParmDefinition, @BeginTT = @BeginT, @BeginVall=@BeginVal OUTPUT; SELECT @BeginVal; SET @SQLString = N'SELECT @EindVall = ' + @Variabele + ' FROM tblRappLog WHERE FLTIME = @EindTT'; SET @ParmDefinition = N'@EindTT int, @EindVall int OUTPUT'; EXECUTE sp_executesql @SQLString, @ParmDefinition, @EindTT = @EindeT, @EindVall=@EindVal OUTPUT; SELECT @EindVal; INSERT INTO TblRappTmp(Variabele, BeginVal, EindVal, VerschilVal) -- Voeg toe aan tijdelijke tabel VALUES (@Variabele, @BeginVal, @EindVal,(@EindVal-@BeginVal)) FETCH NEXT FROM Variabelen -- Volgende waarden ophalen INTO @Variabele END CLOSE Variabelen DEALLOCATE Variabelen -- Foutnummer return sturen ter controle RETURN @Foutnummer GO