set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /*---------------------------------- * stp_ricalcolaRegAttivitaExpl_byPeriodoUser * * Ricalcola le RegAttivitaExpl x utente e intervallo date * mod: S.E.L. - 2013.01.21 *----------------------------------*/ alter PROCEDURE stp_ricalcolaRegAttivitaExpl_byPeriodoUser ( @idxDipendente INT = 0, @inizio DATETIME, @fine DATETIME ) AS -- dichiaro variabili x calcolo tempo execuzione e num records! DECLARE @startProc DATETIME = GETDATE() DECLARE @totRecords INT = 0 BEGIN -- faccio una tab temporanea con tallyTable x calcolo periodo intero... DECLARE @numD INT SET @numD = ( SELECT DATEDIFF(dd, @inizio, @fine ) ) -- crea eventuali record mancanti: data, dip, cognome-nome INSERT INTO RegAttivitaExpl(dataLav, idxDipendente) SELECT ty.Data, ty.idxDipendente FROM ( SELECT CONVERT(DATE,DATEADD(dd, -N, @fine)) as Data, idxDipendente FROM Tally, Dipendenti WHERE N <= @numD -- solo dati desiderati AND (idxDipendente = @idxDipendente OR @idxDipendente = 0) --filtro su dipendenti ) ty LEFT OUTER JOIN RegAttivitaExpl rae ON ty.Data=rae.dataLav AND ty.idxDipendente=rae.idxDipendente WHERE rae.dataLav IS NULL -- righe mancanti! -- resetto a zero le eventuali righe che non hanno attivitą registrate UPDATE rae SET minRegAtt = 0 ,descrProj = '' FROM RegAttivitaExpl rae LEFT OUTER JOIN ( SELECT DISTINCT idxDipendente, CONVERT(DATE,inizio) AS data FROM dbo.RegAttivita WHERE (idxDipendente = @idxDipendente OR @idxDipendente = 0) AND (inizio >= DATEADD(DAY,-1,@inizio) AND inizio <= @fine) GROUP BY idxDipendente, CONVERT(DATE,inizio) ) vra ON rae.dataLav = vra.data AND rae.idxDipendente=vra.idxDipendente WHERE vra.data IS NULL -- righe mancanti! AND ((rae.idxDipendente = @idxDipendente OR @idxDipendente = 0) AND (rae.dataLav >= @inizio AND rae.dataLav < @fine)) -- solo x dip e periodo selezionati -- tab temp del record date progetti ;WITH myCteRA AS( SELECT idxDipendente, CONVERT(DATE,inizio) AS data, SUM(oreTot) AS oreTot, SUM(dbo.f_minuteInterval(inizio, fine)) as minTot, dbo.f_ProgettiByDate(idxDipendente, CONVERT(DATE,inizio)) AS progetti FROM dbo.RegAttivita WHERE (idxDipendente = @idxDipendente OR @idxDipendente = 0) AND (inizio >= DATEADD(DAY,-1,@inizio) AND inizio <= @fine) GROUP BY idxDipendente, CONVERT(DATE,inizio) ) -- aggiorno la tab delle RegAttivitaExpl UPDATE rae SET minRegAtt = minTot ,descrProj = ISNULL(progetti,'') FROM RegAttivitaExpl rae INNER JOIN myCteRA vra ON rae.dataLav = vra.data AND rae.idxDipendente=vra.idxDipendente -- aggiorno cognome nome BEGIN TRY UPDATE rae SET CognomeNome = ISNULL(vcn.CognomeNome,'') FROM RegAttivitaExpl rae INNER JOIN v_cognomeNome vcn ON rae.idxDipendente = vcn.idxDipendente WHERE ISNULL(rae.CognomeNome,'') = '' END TRY BEGIN CATCH -- non faccio nulla END CATCH END --SELECT @numD = @numD * COUNT(*) FROM Dipendenti WHERE (idxDipendente = @idxDipendente OR @idxDipendente = 0) --SELECT @startProc AS startTime, GETDATE() AS endTime, @numD AS numRec, DATEDIFF(ms, @startProc, GETDATE()) AS totMs, CAST(@numD AS FLOAT) * 1000 / DATEDIFF(ms, @startProc, GETDATE()) AS recPerSec RETURN go commit; go create table RegistroEventi( DataOra datetime not null, evento nvarchar(50) not null, commento nvarchar(250), constraint PK_RegistroEventi primary key(DataOra,evento) ); go set xact_abort on go begin transaction go INSERT INTO dbo.RegistroEventi VALUES ('2013-06-10 12:21:52.250', N'checkAnomalie', N'-') INSERT INTO dbo.RegistroEventi VALUES ('2013-06-10 12:21:52.250', N'dailyDuties', N'-') go commit transaction go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /********************************************************** * STORED stp_RE_GetByDataEv * * recupera dati da registro eventi x data ed evento * * mod: S.E.L. 2012.10.29 * **********************************************************/ create PROCEDURE stp_RE_GetByDataEv ( @evento NVARCHAR(50), @data AS DATE ) AS SELECT * FROM RegistroEventi WHERE (evento = @evento) AND (CAST(ISNULL(DataOra, '1900-01-01') AS DATE) = @data) RETURN go commit; go -- registro versione... INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(345, GETDATE()) GO SELECT * FROM LogUpdateDb ORDER BY Versione DESC