@dataFrom)
BEGIN
-- calcolo totale "raw" delle ore
SET @oreTot = CAST(ISNULL(DATEDIFF(minute, @dataFrom, @dataTo), 0) AS float) / 60;
-- definisco tabella cte ricorsiva
WITH mycte AS
(
SELECT CAST(dbo.f_dateOnly(DATEADD(dd,1,@dataFROM)) AS DATETIME) DateValue
UNION ALL
SELECT DateValue + 1
FROM mycte
WHERE DateValue + 1 < dbo.f_dateOnly(@dataTo)
)
-- carico nella tab temporanea i sabati e le domeniche...
INSERT into @tmp_dates(DateValue, h)
SELECT *, CASE ((DATEPART(dw, DateValue) + @@DATEFIRST) % 7) WHEN 0 THEN 16 ELSE 24 END AS h
FROM mycte
WHERE ((DATEPART(dw, DateValue) + @@DATEFIRST) % 7) IN (0,1)
OPTION (MAXRECURSION 0)
-- carico le festività per le date NON ancora presenti
insert into @tmp_dates(DateValue, h)
select data as DateValue, 24 as h--, descrizione
from CalendFesteFerie
where data between @dataFrom and @dataTo and data not in (select distinct DateValue from @tmp_dates)
-- aggiorno sabati/domenica che fossero festivi (ipotesi che hfest > h sab/dom...
UPDATE @tmp_dates
SET h=24
WHERE DateValue in (SELECT data FROM CalendFesteFerie WHERE data between @dataFrom and @dataTo)
-- calcolo INFINE le ore off!
SET @oreOff = (SELECT ISNULL(SUM(h),0) FROM @tmp_dates)
END
-- setto le nuove ore totali... se ho un numero di ore > delle fermate le sottraggo per evitare ore engative...
IF(@oreTot > @oreOff)
BEGIN
SET @oreTot = @oreTot - @oreOff
END
RETURN @oreTot
END]]>
0
BEGIN
DROP TABLE ##TMP_nomiTabelle
END
-- enumero le tab del db in una tab temporanea
SELECT IDENT = IDENTITY (INT,1,1), name
INTO ##TMP_nomiTabelle
FROM sys.Tables
-- eseguo reindicizzazione
DECLARE @VAR1 INT
SET @VAR1 = 1
WHILE @VAR1 < = ( SELECT COUNT(*) FROM ##TMP_nomiTabelle)
BEGIN
DECLARE @OBJECTNAME VARCHAR(256)
-- carico il nome della tab i-esima
SELECT @OBJECTNAME = name
FROM ##TMP_nomiTabelle
WHERE [IDENT] = @VAR1
-- rebuild indice
DBCC DBREINDEX(@OBJECTNAME)
-- incremento
SET @VAR1 = @VAR1 + 1
END
--shrink del db
DBCC SHRINKDATABASE (@databaseName)
END]]>
0)
BEGIN
UPDATE InterventiMtz
SET idxStato = Tra_Ev2Stati.nextIdxStato
FROM InterventiMtz INNER JOIN
Tra_Ev2Stati ON InterventiMtz.idxStato = Tra_Ev2Stati.idxStato
WHERE (InterventiMtz.numIntMtz = @numIntMtz) AND (Tra_Ev2Stati.idxEvento = @idxEvento)
END
COMMIT TRAN
-- calcolo lo stato nuovo...
SET @idxStatoNew = ISNULL((SELECT idxStato
FROM InterventiMtz
WHERE (numIntMtz = @numIntMtz)),0)
RETURN (@idxStatoNew)]]>