Files
WebGIM/GimDB/import/Stored Procedures/stp_importMagRic_step3.sql
2017-01-27 22:26:50 +01:00

108 lines
4.8 KiB
Transact-SQL

-- =============================================
-- 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