USP_TEAMFUNDRAISINGTEAMGROUP_UPDATETEAMS

Used to update a set of records defined by UFN_TEAMFUNDRAISINGTEAMGROUP_GETTEAMS from the given xml string.

Parameters

Parameter Parameter Type Mode Description
@TEAMFUNDRAISINGTEAMGROUPID uniqueidentifier IN
@TEAMHISTORYTEAMS xml IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN

Definition

Copy


            create procedure dbo.USP_TEAMFUNDRAISINGTEAMGROUP_UPDATETEAMS
            (
                @TEAMFUNDRAISINGTEAMGROUPID uniqueidentifier,
                @TEAMHISTORYTEAMS xml,
                @CHANGEAGENTID uniqueidentifier = null,
                @CURRENTDATE datetime = null
            )
            as
                set nocount on;

                if @CHANGEAGENTID is null
                    exec USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

                if @CURRENTDATE is null 
                    set @CURRENTDATE = getdate()

                -- build a temporary table containing the values from the XML

                declare @XMLTEAMS table
                (
                    [TEAMFUNDRAISINGTEAMID] uniqueidentifier,
                    [TEAMFUNDRAISINGTEAMGROUPID] uniqueidentifier
                )

                insert into @XMLTEAMS
                (
                    TEAMFUNDRAISINGTEAMID,
                    TEAMFUNDRAISINGTEAMGROUPID
                )
                select
                    FUNCTIONTEAMS.TEAMFUNDRAISINGTEAMID,
                    TEAMFUNDRAISINGTEAM.TEAMFUNDRAISINGTEAMGROUPID                    
                from
                    dbo.UFN_TEAMFUNDRAISINGTEAM_GETTEAMFUNDRAISINGTEAMHISTORYTEAMS_FROMITEMLISTXML(@TEAMHISTORYTEAMS) FUNCTIONTEAMS
                    left join dbo.TEAMFUNDRAISINGTEAM on FUNCTIONTEAMS.TEAMFUNDRAISINGTEAMID = TEAMFUNDRAISINGTEAM.ID;

                -- update any items that are new in the XML table or removed from the group

                update dbo.TEAMFUNDRAISINGTEAM set
                    TEAMFUNDRAISINGTEAMGROUPID = TEAMSTOUPDATE.TEAMFUNDRAISINGTEAMGROUPID,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                from
                    dbo.TEAMFUNDRAISINGTEAM
                    inner join
                    (
                        select
                            TEAMFUNDRAISINGTEAMID,
                            @TEAMFUNDRAISINGTEAMGROUPID [TEAMFUNDRAISINGTEAMGROUPID]
                        from
                            @XMLTEAMS

                        union all

                        select
                            TEAMFUNDRAISINGTEAMID,
                            null
                        from
                            dbo.UFN_TEAMFUNDRAISINGTEAMGROUP_GETTEAMS(@TEAMFUNDRAISINGTEAMGROUPID)
                        where
                            TEAMFUNDRAISINGTEAMID not in (select TEAMFUNDRAISINGTEAMID from @XMLTEAMS)
                    ) TEAMSTOUPDATE on TEAMSTOUPDATE.TEAMFUNDRAISINGTEAMID = TEAMFUNDRAISINGTEAM.ID
                where
                    TEAMFUNDRAISINGTEAM.TEAMFUNDRAISINGTEAMGROUPID <> TEAMSTOUPDATE.TEAMFUNDRAISINGTEAMGROUPID
                    or
                    TEAMFUNDRAISINGTEAM.TEAMFUNDRAISINGTEAMGROUPID is not null
                    or
                    TEAMSTOUPDATE.TEAMFUNDRAISINGTEAMGROUPID is not null;

                if exists (select top (1) 1 from @XMLTEAMS)
                    begin
                        declare @contextCache varbinary(128);

                        --cache current context information

                        set @contextCache = CONTEXT_INFO();

                        --set CONTEXT_INFO to @CHANGEAGENTID

                        set CONTEXT_INFO @CHANGEAGENTID;

                        delete from dbo.TEAMFUNDRAISINGTEAMGROUP
                        from
                            dbo.TEAMFUNDRAISINGTEAMGROUP
                            left join dbo.TEAMFUNDRAISINGTEAM on TEAMFUNDRAISINGTEAMGROUP.ID = TEAMFUNDRAISINGTEAM.TEAMFUNDRAISINGTEAMGROUPID
                        where
                            TEAMFUNDRAISINGTEAM.ID is null
                            and TEAMFUNDRAISINGTEAMGROUP.ID in (select TEAMFUNDRAISINGTEAMGROUPID from @XMLTEAMS)
                            and TEAMFUNDRAISINGTEAMGROUP.ID <> @TEAMFUNDRAISINGTEAMGROUPID;

                        --reset CONTEXT_INFO to previous value

                        if not @contextCache is null
                          set CONTEXT_INFO @contextCache;
                    end

                return 0;