-- ============================================= -- Author: GAR -- Create date: 2015.11.20 -- Description: Import iniziale dati: Tags -- ============================================= CREATE PROCEDURE [import].[stp_importMagRic_step3] AS BEGIN SET NOCOUNT ON; /* * NOTA: fare in modo che lo esegua in modo "becero" creando TUTTI i tags DISTINCT DESTINAZIONE che esistono (fatto salvo trim e TOP-UPPER x non creare sinonimi solo di errata scrittura), POI da sw farò "il merge" dei tags x riunificarli da WebGIM * * per farlo c'è la tabella di "sinonimi" per cui ad un certo Tag --> 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