USP_LIKELIHOODPERCENTS_CUSTOMUPDATEFROMXML

Updates the likelihood type code and likelihood percent tables from xml.

Parameters

Parameter Parameter Type Mode Description
@XML xml IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN

Definition

Copy


            CREATE procedure [dbo].[USP_LIKELIHOODPERCENTS_CUSTOMUPDATEFROMXML] 
            (
                @XML xml,
                @CHANGEAGENTID uniqueidentifier = null,
                @CHANGEDATE datetime = null
            )
            as
                set nocount on;

                if @CHANGEAGENTID is null
                    exec USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

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

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

                declare @TempTbl table (
                   [ID] uniqueidentifier,
                   [DESCRIPTION] nvarchar(100),
                   [PERCENT] tinyint,
                   [SEQUENCE] int )

                insert into @TempTbl select 
                    [ID],
                    [DESCRIPTION],
                    [PERCENT],
                    [SEQUENCE]
                from dbo.UFN_LIKELIHOODPERCENTS_FROMITEMLISTXML(@XML)

                update @TempTbl set ID = newid() where (ID is null) or (ID = '00000000-0000-0000-0000-000000000000');

                if @@Error <> 0
                    return 1;

                declare @contextCache varbinary(128);
                declare @e int;

                -- cache current context information 

                set @contextCache = CONTEXT_INFO();

                -- set CONTEXT_INFO to @CHANGEAGENTID 

                if not @CHANGEAGENTID is null
                    set CONTEXT_INFO @CHANGEAGENTID;

                -- delete any items that no longer exist in the XML table

                delete from 
                    dbo.[LIKELIHOODTYPECODE] 
                where 
                    [LIKELIHOODTYPECODE].ID in 
                        (select ID from dbo.UFN_LIKELIHOODPERCENTS()
                        except select ID from @TempTbl [TEMP])    

                delete from 
                    dbo.[LIKELIHOODPERCENT] 
                where 
                    [LIKELIHOODPERCENT].ID in 
                        (select ID from dbo.UFN_LIKELIHOODPERCENTS()
                        except select ID from @TempTbl [TEMP] where [TEMP].[PERCENT] is not null)

                select @e=@@error;

                -- reset CONTEXT_INFO to previous value 

                if not @contextCache is null
                    set CONTEXT_INFO @contextCache;

                if @e <> 0
                    return 2;

                -- update the items that exist in the XML table and the db

                update [LIKELIHOODTYPECODE]
                    set [LIKELIHOODTYPECODE].[ID] = temp.[ID],
                        [LIKELIHOODTYPECODE].[DESCRIPTION] = temp.[DESCRIPTION],
                        [LIKELIHOODTYPECODE].[SEQUENCE] = temp.[SEQUENCE],
                        [LIKELIHOODTYPECODE].CHANGEDBYID = @CHANGEAGENTID,
                        [LIKELIHOODTYPECODE].DATECHANGED = @CHANGEDATE
                    from 
                        dbo.[LIKELIHOODTYPECODE] 
                        inner join @TempTbl as [TEMP] on [LIKELIHOODTYPECODE].ID = [TEMP].ID
                    where
                        ([LIKELIHOODTYPECODE].[DESCRIPTION] <> [TEMP].[DESCRIPTION]) or
                        ([LIKELIHOODTYPECODE].[SEQUENCE] <> [TEMP].[SEQUENCE])

                update [LIKELIHOODPERCENT]
                    set [LIKELIHOODPERCENT].[ID] = temp.[ID],
                        [LIKELIHOODPERCENT].[PERCENT] = temp.[PERCENT],
                        [LIKELIHOODPERCENT].CHANGEDBYID = @CHANGEAGENTID,
                        [LIKELIHOODPERCENT].DATECHANGED = @CHANGEDATE
                    from 
                        dbo.[LIKELIHOODPERCENT] 
                        inner join @TempTbl as [TEMP] on [LIKELIHOODPERCENT].ID = [TEMP].ID
                    where
                        [TEMP].[PERCENT] is not null and (
                        ([LIKELIHOODPERCENT].[PERCENT] <> [TEMP].[PERCENT]) or 
                        ([LIKELIHOODPERCENT].[PERCENT] is null and [TEMP].[PERCENT] is not null) or 
                        ([LIKELIHOODPERCENT].[PERCENT] is not null and [TEMP].[PERCENT] is null))

                if @@Error <> 0
                    return 3;    

                -- insert new items

                insert into [LIKELIHOODTYPECODE]  
                    ([ID],
                    [DESCRIPTION],
                    [SEQUENCE],
                    ADDEDBYID, 
                    CHANGEDBYID, 
                    DATEADDED, 
                    DATECHANGED)
                select 
                    [ID],
                    [DESCRIPTION],
                    [SEQUENCE],
                    @CHANGEAGENTID
                    @CHANGEAGENTID
                    @CHANGEDATE
                    @CHANGEDATE
                from 
                    @TempTbl as [TEMP]
                where 
                    not exists (select ID from dbo.[LIKELIHOODTYPECODE] as data where data.ID = [TEMP].ID)

                insert into [LIKELIHOODPERCENT]  
                    ([ID],
                    [PERCENT],        
                    ADDEDBYID, 
                    CHANGEDBYID, 
                    DATEADDED, 
                    DATECHANGED)
                select 
                    [ID],
                    [PERCENT],
                    @CHANGEAGENTID
                    @CHANGEAGENTID
                    @CHANGEDATE
                    @CHANGEDATE
                from 
                    @TempTbl as [TEMP]
                where 
                    [TEMP].[PERCENT] is not null and
                    not exists (select ID from dbo.[LIKELIHOODPERCENT] as data where data.ID = [TEMP].ID)

                if @@Error <> 0
                    return 4;

                return 0;