@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)]]>
@Original_TagCode)
BEGIN
-- aggiorno DESTINAZIONI
UPDATE SinonimiTag
SET TagCode = @TagCode
WHERE TagCode = @Original_TagCode
-- aggiorno ORIGINI
UPDATE SinonimiTag
SET TagCodeOrig = @TagCode
WHERE TagCodeOrig = @Original_TagCode
END
-- aggiorno VERO tag...
UPDATE AnagTags
SET TagCode = @TagCode
,Class = @Class
,TagDescr = @TagDescr
WHERE TagCode = @Original_TagCode
COMMIT tran]]>
etichette -> items
SELECT vsm.*
FROM Tag2Item t2i
INNER JOIN Tag2Macc t2m ON t2i.TagCode = t2m.TagCode
INNER JOIN v_statoMag vsm ON vsm.idxItem = t2i.idxItem
WHERE t2m.idxMacchina = @idxMacchina
RETURN]]>
''
THEN [Descrizione]
ELSE [CodCostruttore]
END, '"', '')))) AS Descrizione
,LTRIM(RTRIM(UPPER(NomeCostruttore))) AS NomeCostruttore
,LTRIM(RTRIM(UPPER(CodCostruttore))) AS CodCostruttore
,LTRIM(RTRIM(UPPER(CodSomaschini))) AS CodInterno
FROM [som_ita].[tmp_ImportRic_A]
)
MERGE INTO dbo.AnagItems AS Target
USING ( SELECT DISTINCT * FROM cteImportRicA ) AS Source
ON Target.Famiglia = Source.Famiglia AND Target.Descrizione = Source.Descrizione AND Target.NomeCostruttore = Source.NomeCostruttore AND Target.CodCostruttore = Source.CodCostruttore AND Target.CodInterno = Source.CodInterno
WHEN NOT MATCHED BY TARGET
THEN
INSERT ( Famiglia,Descrizione,NomeCostruttore,CodCostruttore,CodInterno)
VALUES ( Famiglia,Descrizione,NomeCostruttore,CodCostruttore,CodInterno)
--WHEN MATCHED -- AND Target.TranspCost <> Source.TranspCost AND @flgUpdate = 1
-- THEN
-- UPDATE SET Descrizione = Source.Descrizione
--WHEN NOT MATCHED BY SOURCE THEN
-- DELETE
OUTPUT $ACTION INTO @SummaryOfChanges;-- carico i cambiamenti in tabella
SELECT * FROM dbo.AnagItems
IF @test = 1 ROLLBACK
ELSE COMMIT;
-- Carico le modifiche fatte in variabile Testo
SELECT Change + ' : ' + CONVERT(VARCHAR(10), COUNT(*))
FROM @SummaryOfChanges
GROUP BY Change;
/* reset dbo.AnagItems
DELETE dbo.AnagItems
DBCC CHECKIDENT ('dbo.AnagItems', reseed, 0) -- reset idx tabella dopo delete
*/
END]]>
''
THEN [Descrizione]
ELSE [CodCostruttore]
END, '"', '')))) AS Descrizione -- tolgo eventuali "
,LTRIM(RTRIM(UPPER(NomeCostruttore))) AS NomeCostruttore
,LTRIM(RTRIM(UPPER(CodCostruttore))) AS CodCostruttore
,LTRIM(RTRIM(UPPER(CodSomaschini))) AS CodInterno
,Giacenza
FROM [som_ita].[tmp_ImportRic_A]
)
,cteBis AS (
SELECT ai.*
,'MAG00' AS CodLocazione
,tmp.Giacenza
FROM cteImportRicA AS tmp
INNER JOIN dbo.AnagItems AS ai
ON tmp.Famiglia = ai.Famiglia AND tmp.Descrizione = ai.Descrizione AND tmp.NomeCostruttore = ai.NomeCostruttore AND tmp.CodCostruttore = ai.CodCostruttore AND tmp.CodInterno = ai.CodInterno
)
-- SELECT idxItem, 'MAG00' AS CodLocazione , Giacenza FROM cteBis WHERE idxItem = 1310
MERGE INTO dbo.MagRic AS Target
USING (
SELECT idxItem,CodLocazione,SUM(Giacenza) AS Giacenza FROM cteBis
GROUP BY idxItem ,CodLocazione
) AS Source
ON Target.idxItem = Source.idxItem AND Target.CodLocazione = Source.CodLocazione
WHEN NOT MATCHED BY TARGET THEN
INSERT (idxItem,CodLocazione,Giacenza,dtLastUpd)
VALUES (idxItem,CodLocazione,Giacenza,@DataImp)
WHEN MATCHED THEN
UPDATE
SET Giacenza = Source.Giacenza ,dtLastUpd = @DataImp
--WHEN NOT MATCHED BY SOURCE THEN DELETE
OUTPUT $ACTION INTO @SummaryOfChanges;-- carico i cambiamenti in tabella
SELECT * FROM dbo.MagRic
IF @Test = 1
ROLLBACK
ELSE COMMIT;
-- Carico le modifiche fatte in variabile Testo
SELECT Change + ' : ' + CONVERT(VARCHAR(10), COUNT(*))
FROM @SummaryOfChanges
GROUP BY Change;
END]]>
corrisponde il tag "merge" finale
* QUESTO SIGNIFICA che dopo primo import (becero) nei successivi deve guardare la tabella SinonimiTag, ho creato alcuni esempi
*
* vedi step procedura abbozzati sotto
*
*/
--SELECT * FROM [som_ita].[tmp_ImportRic_A] WHERE Descrizione = ''
--SELECT * FROM dbo.SinonimiTag -- delete FROM dbo.SinonimiTag
--SELECT * FROM dbo.AnagTags -- delete FROM dbo.AnagTags
--SELECT * FROM dbo.Tag2Item -- DELETE FROM dbo.Tag2Item
DECLARE @Test BIT = 0; -- se 1 fa il rollback
DECLARE @DataImp AS SMALLDATETIME = GETDATE();
DECLARE @SummaryOfChanges TABLE (Change VARCHAR(50));
BEGIN TRANSACTION;;
-- ==========================================================
-- NUOVI SINONIMI - se ho sinonimi mancanti li carico in modalità 1=1 TagCodeOrig=TagCode
-- ==========================================================
WITH cteImportRicA
AS (
SELECT DISTINCT LTRIM(RTRIM(UPPER(Destinazione))) + '#' +
LTRIM(RTRIM(UPPER(Gruppo))) AS TagCodeOrig -- TagCodeOrig
FROM [som_ita].[tmp_ImportRic_A]
WHERE Destinazione <> '' OR GRUPPO <> ''
)
INSERT dbo.SinonimiTag
SELECT cte.TagCodeOrig, cte.TagCodeOrig
FROM cteImportRicA AS cte
LEFT JOIN dbo.SinonimiTag AS st ON cte.TagCodeOrig = st.TagCodeOrig
WHERE cte.TagCodeOrig <> '' AND
st.TagCode IS NULL -- solo nuovi
SELECT 'NEW SinonimiTag: ' + CAST ( @@ROWCOUNT AS VARCHAR(10) )
-- ==========================================================
-- INSERT TAGS NUOVI
-- ==========================================================
INSERT dbo.AnagTags
SELECT DISTINCT st.TagCode,'','' FROM dbo.SinonimiTag AS st
LEFT JOIN dbo.AnagTags AS at ON st.TagCode = at.TagCode
WHERE st.TagCode <> '' AND
at.TagCode IS NULL -- solo nuovi
SELECT 'NEW AnagTags: ' + CAST ( @@ROWCOUNT AS VARCHAR(10) )
-- ==========================================================
-- INSERIMENTO NEW Item-TagCode
-- ==========================================================
;WITH cteImportRicA -- normalizzo campi in ingresso
AS (
SELECT LTRIM(RTRIM(UPPER(Gruppo))) AS Famiglia
,LTRIM(RTRIM(UPPER(REPLACE(CASE WHEN ISNULL([Descrizione], '') <> ''
THEN [Descrizione]
ELSE [CodCostruttore]
END, '"', '')))) AS Descrizione -- tolgo eventuali "
,LTRIM(RTRIM(UPPER(NomeCostruttore))) AS NomeCostruttore
,LTRIM(RTRIM(UPPER(CodCostruttore))) AS CodCostruttore
,LTRIM(RTRIM(UPPER(CodSomaschini))) AS CodInterno
,LTRIM(RTRIM(UPPER(Destinazione))) + '#'
+ LTRIM(RTRIM(UPPER(Gruppo))) AS TagCodeOrig -- TagCodeOrig
FROM [som_ita].[tmp_ImportRic_A]
)
,cteNew AS -- ricavo idxItem e TagCode effettivo
(
SELECT DISTINCT ai.idxItem, st.TagCode
FROM cteImportRicA AS tmp
INNER JOIN dbo.AnagItems AS ai
ON tmp.Famiglia = ai.Famiglia AND tmp.Descrizione = ai.Descrizione AND tmp.NomeCostruttore = ai.NomeCostruttore AND tmp.CodCostruttore = ai.CodCostruttore AND tmp.CodInterno = ai.CodInterno
INNER JOIN dbo.SinonimiTag AS st ON tmp.TagCodeOrig = st.TagCodeOrig
)
--SELECT idxItem, TagCode FROM cteNew
-- inserisco new Item-TagCode
MERGE INTO dbo.Tag2Item AS Target
USING ( SELECT * FROM cteNew ) AS Source
ON Target.idxItem = Source.idxItem AND Target.TagCode = Source.TagCode
WHEN NOT MATCHED BY TARGET THEN
INSERT (idxItem,TagCode) VALUES (idxItem,TagCode)
-- WHEN MATCHED THEN UPDATE SET Giacenza = Source.Giacenza ,dtLastUpd = GETDATE()
-- WHEN NOT MATCHED BY SOURCE THEN DELETE
OUTPUT $ACTION INTO @SummaryOfChanges;-- carico i cambiamenti in tabella
IF @Test = 1
ROLLBACK
ELSE COMMIT;
-- Carico le modifiche fatte in variabile Testo
SELECT Change + ' Tag2Item: ' + CONVERT(VARCHAR(10), COUNT(*))
FROM @SummaryOfChanges
GROUP BY Change;
END]]>