USE [GIM]
GO
/****** Object:  StoredProcedure [dbo].[stp_SinTag_UpdateQuery]    Script Date: 02/12/2015 16:56:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*************************************
* STORED PROCEDURE stp_SinTag_UpdateQuery
*
*  update recordmerge come sinonimo del TagCordOrig (che sparisce) verso TagCode
*
*  - ricodifica associazione verso item
*  - ricodifica associazione verso macchine
*  - crea record in tab sinonimi
*  - elimina record in tab item
*
* mod : 23/11/2015	
* aut : S.E. Locatelli
**************************************/
ALTER PROCEDURE [dbo].[stp_SinTag_UpdateQuery]
(
	@Original_TagCodeOrig nvarchar(50),
	@TagCode nvarchar(50)
)
AS
	SET NOCOUNT OFF;


	
BEGIN tran
    ------------------------------------------------------
    -- step 1: ricodifica associazione verso ITEMS
    ------------------------------------------------------
    -- 2015.12.02: rifatto! tolto update e messo UPDATE (di quello che POSSO aggiornare) + DELETE delle "rimanenze"
    --UPDATE  Tag2Item
	   --SET TagCode = @TagCode
    --WHERE	  TagCode	= @Original_TagCodeOrig

    -- FACCIO CTE x calcolare COSA aggiornerei...
    ;WITH cte_t2i AS
    (
	   SELECT	 idxItem, @TagCode AS TagCode
	   FROM	 Tag2Item
	   WHERE	 TagCode	= @Original_TagCodeOrig
    )
    -- faccio MERGE dei record MANCANTI
    MERGE INTO Tag2Item AS target
    USING (SELECT * FROM cte_t2i) AS source
    ON (target.idxItem = source.idxItem AND target.TagCode = source.TagCode)
    --WHEN MATCHED THEN 
    --    UPDATE SET Traduzione = source.traduzione
    WHEN NOT MATCHED THEN	
	    INSERT (idxItem, TagCode)
	    VALUES (source.idxItem, source.TagCode);
    -- faccio DELETE di quanto rimasto
    DELETE  
    FROM	  Tag2Item
    WHERE	  TagCode	= @Original_TagCodeOrig
    ------------------------------------------------------

    ------------------------------------------------------
    -- step 2: ricodifica associazione verso MACCHINE
    ------------------------------------------------------
    -- 2015.12.02: rifatto! tolto update e messo UPDATE (di quello che POSSO aggiornare) + DELETE delle "rimanenze"
    --UPDATE  Tag2Macc
	   --SET TagCode = @TagCode
    --WHERE	  TagCode	= @Original_TagCodeOrig
    
    -- FACCIO CTE x calcolare COSA aggiornerei...
    ;WITH cte_t2m AS
    (
	   SELECT	 idxMacchina, @TagCode AS TagCode
	   FROM	 Tag2Macc
	   WHERE	 TagCode	= @Original_TagCodeOrig
    )
    -- faccio MERGE dei record MANCANTI
    MERGE INTO Tag2Macc AS target
    USING (SELECT * FROM cte_t2m) AS source
    ON (target.idxMacchina = source.idxMacchina AND target.TagCode = source.TagCode)
    --WHEN MATCHED THEN 
    --    UPDATE SET Traduzione = source.traduzione
    WHEN NOT MATCHED THEN	
	    INSERT (idxMacchina, TagCode)
	    VALUES (source.idxMacchina, source.TagCode);
    -- faccio DELETE di quanto rimasto
    DELETE  
    FROM	  Tag2Macc
    WHERE	  TagCode	= @Original_TagCodeOrig
    ------------------------------------------------------


    ------------------------------------------------------
    -- step 3: creo record sinonimi
    ------------------------------------------------------
    UPDATE  SinonimiTag 
    SET	  TagCode	   = @TagCode 
    WHERE	  ((TagCodeOrig = @Original_TagCodeOrig) AND TagCode <> @TagCode) OR ((TagCode = @Original_TagCodeOrig))
    
    --INSERT INTO SinonimiTag (TagCodeOrig, TagCode)
    --VALUES  (@Original_TagCodeOrig, @TagCode)
    ------------------------------------------------------


    ------------------------------------------------------
    -- step 4: elimino ITEMS
    ------------------------------------------------------
    DELETE  
    FROM	  AnagTags
    WHERE	  TagCode	= @Original_TagCodeOrig
    ------------------------------------------------------

COMMIT Tran
