USP_MEMBERSHIPDUESBATCH_GETMEMBERS_UPDATEFROMXML

Parameters

Parameter Parameter Type Mode Description
@BATCHMEMBERSHIPDUESID uniqueidentifier IN
@MEMBERS xml IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN

Definition

Copy


CREATE procedure dbo.USP_MEMBERSHIPDUESBATCH_GETMEMBERS_UPDATEFROMXML
(
    @BATCHMEMBERSHIPDUESID uniqueidentifier,
    @MEMBERS xml,
    @CHANGEAGENTID uniqueidentifier = null,
    @CHANGEDATE datetime = null
)
as
begin
    set nocount on;

    if @CHANGEAGENTID is null
        exec USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

    if @CHANGEDATE is null
        set @CHANGEDATE = getdate();

    declare @BATCHMEMBERS table (ID uniqueidentifier)
    insert into @BATCHMEMBERS (ID)
    select ID
    from dbo.BATCHMEMBERSHIPDUESMEMBER
    where BATCHMEMBERSHIPDUESMEMBER.BATCHMEMBERSHIPDUESID = @BATCHMEMBERSHIPDUESID 
        and BATCHMEMBERSHIPDUESMEMBER.TYPECODE = 0

    insert into dbo.BATCHMEMBERSHIPDUESMEMBER (ID, BATCHMEMBERSHIPDUESID, CONSTITUENTID, TYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
    select newID(), @BATCHMEMBERSHIPDUESID, MEMBERS.CONSTITUENTID, 0, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
    from (
        select
            ID,
            CONSTITUENTID
        from dbo.UFN_MEMBERSHIPDUESBATCH_GETMEMBERS_FROMITEMLISTXML(@MEMBERS)
    ) MEMBERS
    where (MEMBERS.ID is null or MEMBERS.ID not in (select ID from @BATCHMEMBERS))

    update dbo.BATCHMEMBERSHIPDUESMEMBER
    set BATCHMEMBERSHIPDUESMEMBER.CONSTITUENTID = MEMBERS.CONSTITUENTID, 
        CHANGEDBYID = @CHANGEAGENTID
        DATECHANGED = @CHANGEDATE
    from (
        select
            ID,
            CONSTITUENTID
        from dbo.UFN_MEMBERSHIPDUESBATCH_GETMEMBERS_FROMITEMLISTXML(@MEMBERS)
    ) MEMBERS
    inner join @BATCHMEMBERS BATCHMEMBERS on MEMBERS.ID = BATCHMEMBERS.ID
    where BATCHMEMBERSHIPDUESMEMBER.ID = BATCHMEMBERS.ID

    delete from dbo.BATCHMEMBERSHIPDUESMEMBER
    where ID in (
        select BATCHMEMBERS.ID
        from @BATCHMEMBERS BATCHMEMBERS
        where ID not in (
            select
                ID
            from dbo.UFN_MEMBERSHIPDUESBATCH_GETMEMBERS_FROMITEMLISTXML(@MEMBERS)
            where ID is not null
        )
    )

end