IF OBJECT_ID('stage.sp_MrgIntezmenyAdatszolgaltatasok') IS NOT NULL BEGIN
  DROP PROCEDURE stage.sp_MrgIntezmenyAdatszolgaltatasok  
END
GO

CREATE PROCEDURE stage.sp_MrgIntezmenyAdatszolgaltatasok 
AS 
BEGIN
  MERGE stage.T_INTEZMENYADATSZOLG_STAGE AS trg
    USING (
      SELECT 
        i.ID AS C_INTEZMENYID,
        t.C_NEV AS C_TANEVNEV,
        ia.ID AS C_INTEZMENYADATSZOLGID,
        ia.C_SZAKBEIRATKFELVETT AS C_SZAKBEIRATKFELVETT,
        ia.C_SZAKBEIRATKJELENTKEZETT AS C_SZAKBEIRATKJELENTKEZETT,
        ia.TOROLT AS TOROLT
      FROM T_INTEZMENYADATSZOLGALTATAS ia
        INNER JOIN T_INTEZMENY i ON i.ID = ia.C_INTEZMENYID
        INNER JOIN T_TANEV t ON t.ID = ia.C_TANEVID
      WHERE ia.TOROLT = 'F' AND t.TOROLT = 'F' AND i.TOROLT = 'F'
    ) src ON (trg.C_INTEZMENYID = src.C_INTEZMENYID AND trg.C_INTEZMENYADATSZOLGID = src.C_INTEZMENYADATSZOLGID) 
    WHEN MATCHED AND 
         (trg.C_SZAKBEIRATKFELVETT <> src.C_SZAKBEIRATKFELVETT OR (trg.C_SZAKBEIRATKFELVETT IS NULL AND src.C_SZAKBEIRATKFELVETT IS NOT NULL) OR (trg.C_SZAKBEIRATKFELVETT IS NOT NULL AND src.C_SZAKBEIRATKFELVETT IS NULL))
      OR (trg.C_SZAKBEIRATKJELENTKEZETT <> src.C_SZAKBEIRATKJELENTKEZETT OR (trg.C_SZAKBEIRATKJELENTKEZETT IS NULL AND src.C_SZAKBEIRATKJELENTKEZETT IS NOT NULL) OR (trg.C_SZAKBEIRATKJELENTKEZETT IS NOT NULL AND src.C_SZAKBEIRATKJELENTKEZETT IS NULL))
    THEN
      UPDATE SET
         trg.C_SZAKBEIRATKFELVETT = src.C_SZAKBEIRATKFELVETT
        ,trg.C_SZAKBEIRATKJELENTKEZETT = src.C_SZAKBEIRATKJELENTKEZETT 
        ,trg.TOROLT = src.TOROLT
        ,trg.LASTCHANGED = GETDATE()
    WHEN NOT MATCHED BY TARGET THEN
      INSERT (
        C_INTEZMENYID,
        C_TANEVNEV,  
        C_INTEZMENYADATSZOLGID,
        C_SZAKBEIRATKFELVETT,
        C_SZAKBEIRATKJELENTKEZETT,
        TOROLT,
        LASTCHANGED,
        CREATED
      ) VALUES (
        src.C_INTEZMENYID,
        src.C_TANEVNEV,  
        src.C_INTEZMENYADATSZOLGID,
        src.C_SZAKBEIRATKFELVETT,
        src.C_SZAKBEIRATKJELENTKEZETT,
        'F',
        GETDATE(),
        GETDATE()
      )
    WHEN NOT MATCHED BY SOURCE AND trg.TOROLT = 'F' THEN
      UPDATE SET 
        trg.LASTCHANGED = GETDATE(), 
        trg.TOROLT = 'T';
END
GO
