CREATE OR ALTER TRIGGER LD0T0A_SKCols
ON LD0P0A
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
    
    -- Förhindra rekursiv trigger-aktivering
    IF TRIGGER_NESTLEVEL() > 1
        RETURN;
    
    -- Uppdatera endast rader där ADRSKYDD eller SKYDDADFOLKBOKF har ändrats
    UPDATE t
    SET 
        t.SKADRESS = CASE
            WHEN i.SKYDDADFOLKBOKF = 1 THEN 'Skyddad folkbokföring'
            WHEN i.ADRSKYDD = 1 AND i.SKYDDADFOLKBOKF = 0 THEN 'Sekretessmarkering'
            WHEN i.ADRSKYDD = 0 AND i.SKYDDADFOLKBOKF = 0 
                 AND t.SKADRESS IN ('Sekretessmarkering', 'Skyddad folkbokföring') THEN ''
            ELSE t.SKADRESS
        END,
        
        t.SKCOADR = CASE
            WHEN i.SKYDDADFOLKBOKF = 1 THEN 'Skyddad folkbokföring'
            WHEN i.ADRSKYDD = 1 AND i.SKYDDADFOLKBOKF = 0 THEN 'Sekretessmarkering'
            WHEN i.ADRSKYDD = 0 AND i.SKYDDADFOLKBOKF = 0 
                 AND t.SKCOADR IN ('Sekretessmarkering', 'Skyddad folkbokföring') THEN ''
            ELSE t.SKCOADR
        END,
        
        t.SKPOSTNR = CASE
            WHEN i.SKYDDADFOLKBOKF = 1 OR i.ADRSKYDD = 1 THEN '00000'
            WHEN i.ADRSKYDD = 0 AND i.SKYDDADFOLKBOKF = 0 
                 AND t.SKPOSTNR = '00000'
                 AND t.SKADRESS IN ('Sekretessmarkering', 'Skyddad folkbokföring') THEN ''
            ELSE t.SKPOSTNR
        END,
        
        t.SKORT = CASE
            WHEN i.SKYDDADFOLKBOKF = 1 THEN 'SKYDDAD FOLKBOKFÖRING'
            WHEN i.ADRSKYDD = 1 AND i.SKYDDADFOLKBOKF = 0 THEN 'SEKRETESSMARKERING'
            WHEN i.ADRSKYDD = 0 AND i.SKYDDADFOLKBOKF = 0 
                 AND t.SKORT IN ('SEKRETESSMARKERING', 'SKYDDAD FOLKBOKFÖRING') THEN ''
            ELSE t.SKORT
        END
    FROM LD0P0A t
    INNER JOIN inserted i ON t.PNR = i.PNR
    INNER JOIN deleted d ON t.PNR = d.PNR
    WHERE (i.ADRSKYDD <> d.ADRSKYDD OR i.SKYDDADFOLKBOKF <> d.SKYDDADFOLKBOKF)
END
GO
