Copy Code Trigger Definition

                
CREATE trigger dbo.TR_MEMBER_VALIDMEMBERCHECK on dbo.MEMBER after insert, update not for replication
as begin
    set nocount on;
    
    if update(CONSTITUENTID) or update(MEMBERSHIPID) or update(ISDROPPED)
    begin
        if exists (
            select top 1
                1
            from
                dbo.MEMBER
            inner join (
                select distinct MEMBERSHIPID, CONSTITUENTID
                from inserted
                where ISDROPPED = 0
            ) as UPDATEDMEMBERS on UPDATEDMEMBERS.MEMBERSHIPID = MEMBER.MEMBERSHIPID and UPDATEDMEMBERS.CONSTITUENTID = MEMBER.CONSTITUENTID
            where
                MEMBER.ISDROPPED = 0
            group by
                MEMBER.MEMBERSHIPID, MEMBER.CONSTITUENTID
            having
                count(*) > 1
        )
        begin
            raiserror('BBERR_INVALIDMEMBER', 13, 1);
            rollback transaction;
        end
        
        if exists (
            select
                1
            from
                inserted
            inner join
                dbo.MEMBERSHIP as INSERTEDMEMBERSHIP on INSERTEDMEMBERSHIP.ID = inserted.MEMBERSHIPID
            inner join
                dbo.MEMBERSHIPPROGRAM on MEMBERSHIPPROGRAM.ID = INSERTEDMEMBERSHIP.MEMBERSHIPPROGRAMID
            where
                inserted.ISDROPPED = 0
                and MEMBERSHIPPROGRAM.ALLOWMULTIPLEMEMBERSHIPS = 0
                and INSERTEDMEMBERSHIP.STATUSCODE <> 1  -- Cancelled

                and exists (
                    select
                        1
                    from
                        dbo.MEMBER
                    inner join
                        dbo.MEMBERSHIP on MEMBERSHIP.ID = MEMBER.MEMBERSHIPID
                    where
                        MEMBER.CONSTITUENTID = inserted.CONSTITUENTID
                        and MEMBER.MEMBERSHIPID <> inserted.MEMBERSHIPID
                        and MEMBERSHIP.MEMBERSHIPPROGRAMID = INSERTEDMEMBERSHIP.MEMBERSHIPPROGRAMID
                        and MEMBERSHIP.STATUSCODE <> 1  -- Cancelled

                        and MEMBER.ISDROPPED = 0
                )
        )
        begin
            raiserror('CK_MEMBER_VALIDALLOWMULTIPLEMEMBERSHIPS', 13, 1);
            rollback transaction;
        end
    end
end