108 lines
4.8 KiB
Transact-SQL
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 |