USP_GLOBALCHANGE_ADDCONSTITUENTATTRIBUTE

Parameters

Parameter Parameter Type Mode Description
@IDSETREGISTERID uniqueidentifier IN
@ATTRIBUTECATEGORYID uniqueidentifier IN
@STRINGVALUE nvarchar(250) IN
@NUMBERVALUE int IN
@MONEYVALUE money IN
@DATEVALUE datetime IN
@BOOLEANVALUE bit IN
@CODETABLEVALUE uniqueidentifier IN
@FUZZYDATEVALUE UDT_FUZZYDATE IN
@CONSTITUENTIDVALUE uniqueidentifier IN
@HOURMINUTEVALUE UDT_HOURMINUTE IN
@MEMOVALUE nvarchar(max) IN
@COMMENT nvarchar(255) IN
@REMOVEUNQUALIFIED bit IN
@OVERWRITEEXISTINGVALUE bit IN
@CHANGEAGENTID uniqueidentifier IN
@ASOF datetime IN
@NUMBERADDED int INOUT
@NUMBEREDITED int INOUT
@NUMBERDELETED int INOUT
@CURRENTAPPUSERID uniqueidentifier IN
@CURRENCYID uniqueidentifier IN
@STARTDATE datetime IN
@ENDDATE datetime IN

Definition

Copy


            CREATE procedure dbo.USP_GLOBALCHANGE_ADDCONSTITUENTATTRIBUTE
            (
                @IDSETREGISTERID uniqueidentifier = null
                @ATTRIBUTECATEGORYID uniqueidentifier,
                @STRINGVALUE nvarchar(250) = null,
                @NUMBERVALUE int = null,
                @MONEYVALUE money = null,
                @DATEVALUE datetime = null,
                @BOOLEANVALUE bit = null,
                @CODETABLEVALUE uniqueidentifier = null,
                @FUZZYDATEVALUE udt_fuzzydate = null,
                @CONSTITUENTIDVALUE uniqueidentifier = null,
                @HOURMINUTEVALUE udt_hourminute = null,
                @MEMOVALUE nvarchar(max) = null,
                @COMMENT nvarchar(255) = null,
                @REMOVEUNQUALIFIED bit,
                @OVERWRITEEXISTINGVALUE bit,
                @CHANGEAGENTID uniqueidentifier = null,
                @ASOF as datetime = null,
                @NUMBERADDED int = 0 output,
                @NUMBEREDITED int = 0 output,
                @NUMBERDELETED int = 0 output,
                @CURRENTAPPUSERID uniqueidentifier = null,
                @CURRENCYID uniqueidentifier = null,
                @STARTDATE datetime = null,
                @ENDDATE datetime = null
            )
            as            
                set nocount off;

                declare @DATATYPE int
                declare @ATTRIBUTETABLENAME nvarchar(128)
                declare @INSERTSQL nvarchar(max)
                declare @UPDATESQL nvarchar(max)
                declare @PARAMETERDEFINITION nvarchar(500)
                declare @CURRENTDATE datetime
                declare @ONEPERRECORD bit
                declare @VALUECOLUMNNAME nvarchar(128)

                set @NUMBERADDED = 0;
                set @NUMBEREDITED = 0;
                set @NUMBERDELETED = 0
                set @UPDATESQL = '';

                declare @BYPASSSECURITY bit;
                declare @BPID uniqueidentifier;
                declare @BYPASSSITESECURITY bit;
                declare @SECURITYCLAUSE nvarchar(max);
                declare @MULTIPLEATTRIBUTESECURITYCLAUSE nvarchar(max);
                declare @SECURITYPARAMETERS nvarchar(500);

                set @BPID = '3269A1D1-31CB-4D28-945C-B7623A3EFCCA';
                set @CURRENTDATE = getdate();

                if @CURRENCYID is null
                    set @CURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

                exec dbo.USP_SECURITY_APPUSER_BYPASSSECURITYFORBUSINESSPROCESS @CURRENTAPPUSERID, @BPID, @BYPASSSECURITY output, @BYPASSSITESECURITY output;

                set @SECURITYPARAMETERS = ', @CURRENTAPPUSERIDPARAMETER uniqueidentifier, @BPIDPARAMETER uniqueidentifier, @BYPASSSECURITYPARAMETER bit, @BYPASSSITESECURITYPARAMETER bit'

                set @SECURITYCLAUSE = '
                        left join dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORBUSINESSPROCESS(@CURRENTAPPUSERIDPARAMETER, @BPIDPARAMETER) as CONSTIT_RACS on SELECTEDCONSTITUENT.ID = CONSTIT_RACS.ID
                    where
                        (@BYPASSSECURITYPARAMETER = 1 or CONSTIT_RACS.ID is not null)
                        and 
                        (
                            @BYPASSSITESECURITYPARAMETER = 1 or 
                            exists 
                            (
                                select 1 
                                from dbo.CONSTITUENT 
                                left join dbo.CONSTITUENTSITE on CONSTITUENTSITE.CONSTITUENTID = CONSTITUENT.ID
                                where CONSTITUENT.ID = SELECTEDCONSTITUENT.ID 
                                and dbo.UFN_SECURITY_APPUSER_GRANTED_BUSINESSPROCESS_FORSITE(@CURRENTAPPUSERIDPARAMETER, @BPIDPARAMETER, CONSTITUENTSITE.SITEID) = 1
                            )
                        )
                    ';

                set @MULTIPLEATTRIBUTESECURITYCLAUSE = '
                        left join dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORBUSINESSPROCESS(@CURRENTAPPUSERIDPARAMETER, @BPIDPARAMETER) as CONSTIT_RACS on SELECTEDCONSTITUENT.CONSTITUENTID = CONSTIT_RACS.ID
                    where
                        (@BYPASSSECURITYPARAMETER = 1 or CONSTIT_RACS.ID is not null)
                        and 
                        (
                            @BYPASSSITESECURITYPARAMETER = 1 or 
                            exists 
                            (
                                select 1 
                                from dbo.CONSTITUENT 
                                left join dbo.CONSTITUENTSITE on CONSTITUENTSITE.CONSTITUENTID = CONSTITUENT.ID
                                where CONSTITUENT.ID = SELECTEDCONSTITUENT.CONSTITUENTID 
                                and dbo.UFN_SECURITY_APPUSER_GRANTED_BUSINESSPROCESS_FORSITE(@CURRENTAPPUSERIDPARAMETER, @BPIDPARAMETER, CONSTITUENTSITE.SITEID) = 1
                            )
                        )
                    ';            

                if @CHANGEAGENTID is null begin
                    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
                end

                select 
                    @DATATYPE = ATTRIBUTECATEGORY.DATATYPECODE, 
                    @ATTRIBUTETABLENAME = TABLECATALOG.TABLENAME, 
                    @ONEPERRECORD = ATTRIBUTECATEGORY.ONLYALLOWONEPERRECORD,
                    @VALUECOLUMNNAME = ATTRIBUTECATEGORY.VALUECOLUMNNAME
                from 
                    dbo.ATTRIBUTECATEGORY 
                    inner join dbo.TABLECATALOG on TABLECATALOG.ID = ATTRIBUTECATEGORY.TABLECATALOGID 
                where 
                    ATTRIBUTECATEGORY.ID = @ATTRIBUTECATEGORYID;

                set @PARAMETERDEFINITION = '@COMMENTPARAMETER nvarchar(255), @CHANGEAGENTIDPARAMETER uniqueidentifier, @CURRENTDATEPARAMETER datetime, @STARTDATEPARAMETER datetime, @ENDDATEPARAMETER datetime';
                if @DATATYPE = 3
                    set @PARAMETERDEFINITION = '@CURRENCYIDPARAMETER uniqueidentifier, ' + @PARAMETERDEFINITION;

                declare @SELECTIONTABLESQL nvarchar(200);
                declare @SELECTION nvarchar(43);
                set @SELECTION = '';

                if @IDSETREGISTERID is not null begin
                    declare @IDSETPARAMETERDEFINITION nvarchar(500);
                    set @IDSETPARAMETERDEFINITION = '@IDSETREGISTERIDPARAMETER uniqueidentifier';

                    select @SELECTION = '##SELECTION' + replace(cast(newid() as nvarchar(36)),'-','')

                    set @SELECTIONTABLESQL = 'create table ' + @SELECTION + '(ID UNIQUEIDENTIFIER NOT NULL PRIMARY KEY)';
                    exec sp_executesql @SELECTIONTABLESQL;

                    declare @IDSETREGISTERSQL nvarchar(max);

                    --retrieve records from the selection based on whether or not the user should bypass security

                    if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0
                        begin
                            set @IDSETPARAMETERDEFINITION = '@IDSETREGISTERIDPARAMETER uniqueidentifier' + @SECURITYPARAMETERS;

                            --insert records from the selection for which the user has rights

                            set @IDSETREGISTERSQL = 'insert into ' + @SELECTION + '(ID) select SELECTEDCONSTITUENT.ID from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@IDSETREGISTERIDPARAMETER) SELECTEDCONSTITUENT ' + @SECURITYCLAUSE;
                            exec sp_executesql @IDSETREGISTERSQL, @IDSETPARAMETERDEFINITION, @IDSETREGISTERIDPARAMETER = @IDSETREGISTERID, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY;
                        end
                    else
                        begin
                            --insert all records from the selection

                            set @IDSETREGISTERSQL = 'insert into ' + @SELECTION + '(ID) select ID from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@IDSETREGISTERIDPARAMETER)';
                            exec sp_executesql @IDSETREGISTERSQL, @IDSETPARAMETERDEFINITION, @IDSETREGISTERIDPARAMETER = @IDSETREGISTERID;
                        end

                    --AdamBu - Bug 40526 - If the selection used is static, make sure none of the records it contains have been deleted.

                    if exists(
                        select 1
                        from dbo.IDSETREGISTER
                        where ID = @IDSETREGISTERID and STATIC = 1
                    )
                    begin
                        declare @STATICSQL nvarchar(max) = 'delete ' + @SELECTION + ' where ID not in(select ID from CONSTITUENT);'
                        exec sp_executesql @STATICSQL
                    end
                end

                /* If @REMOVEUNQUALIFIED is true and and id set is selected then delete all records from the attribute table that are not in the id set.*/
                if @IDSETREGISTERID is not null and @REMOVEUNQUALIFIED = 1 begin
                    declare @DELETESQL nvarchar(max);
                    declare @DELETEPARAMETERDEFINITION nvarchar(500);

                    set @DELETEPARAMETERDEFINITION = '@CURRENTAPPUSERIDPARAMETER uniqueidentifier, @BPIDPARAMETER uniqueidentifier, @BYPASSSECURITYPARAMETER bit, @BYPASSSITESECURITYPARAMETER bit'

                    if @ONEPERRECORD = 1    
                        if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0
                            begin
                                set @DELETESQL = 'delete from dbo.[' + @ATTRIBUTETABLENAME + '] where ID in
                                (
                                    select SELECTEDCONSTITUENT.ID 
                                    from dbo.[' + @ATTRIBUTETABLENAME + '] SELECTEDCONSTITUENT ' + @SECURITYCLAUSE + 
                                        ' and SELECTEDCONSTITUENT.ID not in(select ID from ' + @SELECTION + ')
                                )';
                            end
                        else
                            begin
                                set @DELETESQL = 'delete from dbo.[' + @ATTRIBUTETABLENAME + '] where ID in
                                (
                                    select SELECTEDCONSTITUENT.ID 
                                    from dbo.[' + @ATTRIBUTETABLENAME + '] SELECTEDCONSTITUENT ' + 
                                        ' where SELECTEDCONSTITUENT.ID not in(select ID from ' + @SELECTION + ')
                                )';
                            end
                    else    
                        if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0
                            begin
                                set @DELETESQL = 'delete from dbo.[' + @ATTRIBUTETABLENAME + '] where CONSTITUENTID in
                                (
                                    select SELECTEDCONSTITUENT.CONSTITUENTID 
                                    from dbo.[' + @ATTRIBUTETABLENAME + '] SELECTEDCONSTITUENT ' + @MULTIPLEATTRIBUTESECURITYCLAUSE + 
                                        ' and SELECTEDCONSTITUENT.CONSTITUENTID not in(select ID from ' + @SELECTION + ')
                                )';
                            end
                        else
                            begin
                                set @DELETESQL = 'delete from dbo.[' + @ATTRIBUTETABLENAME + '] where CONSTITUENTID in
                                (
                                    select SELECTEDCONSTITUENT.CONSTITUENTID 
                                    from dbo.[' + @ATTRIBUTETABLENAME + '] SELECTEDCONSTITUENT ' + 
                                        ' where SELECTEDCONSTITUENT.CONSTITUENTID not in(select ID from ' + @SELECTION + ')
                                )';
                            end

                    declare @CONTEXTCACHE varbinary(128);

                    /* Cache current context information@ */
                    set @CONTEXTCACHE = CONTEXT_INFO();

                    /* Set CONTEXT_INFO to @CHANGEAGENTID */
                    set CONTEXT_INFO @CHANGEAGENTID;

                    /* delete records */
                    exec sp_executesql @DELETESQL, @DELETEPARAMETERDEFINITION, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY;
                    set @NUMBERDELETED = @@ROWCOUNT;

                    /* Reset CONTEXT_INFO to previous value */
                    if not @contextCache is null
                        set CONTEXT_INFO @CONTEXTCACHE;
                end

                if @IDSETREGISTERID is not null
                    begin
                        if @ONEPERRECORD = 1
                            begin
                                set @INSERTSQL = 'insert into dbo.[' + @ATTRIBUTETABLENAME + '] (ID, ' + @VALUECOLUMNNAME + ', ';
                                if @DATATYPE = 3
                                    set @INSERTSQL = @INSERTSQL + 'CURRENCYID, ';
                                set @INSERTSQL = @INSERTSQL + 'COMMENT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, STARTDATE, ENDDATE) select SELECTION.ID, @VALUEPARAMETER, ';
                                if @DATATYPE = 3
                                    set @INSERTSQL = @INSERTSQL + '@CURRENCYIDPARAMETER, ';
                                set @INSERTSQL = @INSERTSQL + '@COMMENTPARAMETER, @CHANGEAGENTIDPARAMETER, @CHANGEAGENTIDPARAMETER, @CURRENTDATEPARAMETER, @CURRENTDATEPARAMETER, @STARTDATEPARAMETER, @ENDDATEPARAMETER from ' + @SELECTION + ' as SELECTION';

                                /* We don't want to add a duplicate attribute value so we need to check if the value already exists before inserting the record. */
                                set @INSERTSQL = @INSERTSQL + ' where SELECTION.ID not in(select ID from dbo.[' + @ATTRIBUTETABLENAME + '])'

                                /* If overwriting the exiting value we must only insert records that don't already exist in the attribute table */
                                if @OVERWRITEEXISTINGVALUE = 1 begin
                                    set @UPDATESQL = 'update dbo.[' + @ATTRIBUTETABLENAME + '] set ' + @VALUECOLUMNNAME + ' = @VALUEPARAMETER, ';
                                    if @DATATYPE = 3
                                        set @UPDATESQL = @UPDATESQL + 'CURRENCYID = @CURRENCYIDPARAMETER, ';
                                    set @UPDATESQL = @UPDATESQL + 'COMMENT = @COMMENTPARAMETER, CHANGEDBYID = @CHANGEAGENTIDPARAMETER, DATECHANGED = @CURRENTDATEPARAMETER, STARTDATE = @STARTDATEPARAMETER, ENDDATE = @ENDDATEPARAMETER where [' + @ATTRIBUTETABLENAME + '].ID in (select ID from ' + @SELECTION + ')'
                                end
                            end
                        else
                            begin
                                set @INSERTSQL = 'insert into dbo.[' + @ATTRIBUTETABLENAME + '] (ID, CONSTITUENTID, ' + @VALUECOLUMNNAME + ', ';
                                if @DATATYPE = 3
                                    set @INSERTSQL = @INSERTSQL + 'CURRENCYID, ';
                                set @INSERTSQL = @INSERTSQL + 'COMMENT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, STARTDATE, ENDDATE) select newid(), SELECTION.ID, @VALUEPARAMETER, ';
                                if @DATATYPE = 3
                                    set @INSERTSQL = @INSERTSQL + '@CURRENCYIDPARAMETER, ';
                                set @INSERTSQL = @INSERTSQL + '@COMMENTPARAMETER, @CHANGEAGENTIDPARAMETER, @CHANGEAGENTIDPARAMETER, @CURRENTDATEPARAMETER, @CURRENTDATEPARAMETER, @STARTDATEPARAMETER, @ENDDATEPARAMETER from ' + @SELECTION + ' as SELECTION';

                                /* If overwriting the exiting value we must only insert records that don't already exist in the attribute table */
                                if @OVERWRITEEXISTINGVALUE = 1 begin

                                    /* Don't insert new values for entries that will be overwritten */
                                    set @INSERTSQL = @INSERTSQL + ' where SELECTION.ID not in(select CONSTITUENTID from dbo.[' + @ATTRIBUTETABLENAME + '])'

                                    set @UPDATESQL = 'update dbo.[' + @ATTRIBUTETABLENAME + '] set ' + @VALUECOLUMNNAME + ' = @VALUEPARAMETER, ';
                                    if @DATATYPE = 3
                                        set @UPDATESQL = @UPDATESQL + 'CURRENCYID = @CURRENCYIDPARAMETER, ';
                                    set @UPDATESQL = @UPDATESQL + 'COMMENT = @COMMENTPARAMETER, CHANGEDBYID = @CHANGEAGENTIDPARAMETER, DATECHANGED = @CURRENTDATEPARAMETER, STARTDATE = @STARTDATEPARAMETER, ENDDATE = @ENDDATEPARAMETER where [' + @ATTRIBUTETABLENAME + '].CONSTITUENTID in (select ID from ' + @SELECTION + ')'
                                end
                            end
                    end
                else
                    begin
                        if @ONEPERRECORD = 1
                            begin
                                if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0 
                                    begin
                                        set @INSERTSQL = 'insert into dbo.[' + @ATTRIBUTETABLENAME + '] (ID, ' + @VALUECOLUMNNAME + ', ';
                                        if @DATATYPE = 3
                                            set @INSERTSQL = @INSERTSQL + 'CURRENCYID, ';
                                        set @INSERTSQL = @INSERTSQL + 'COMMENT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, STARTDATE, ENDDATE) select SELECTEDCONSTITUENT.ID, @VALUEPARAMETER, ';
                                        if @DATATYPE = 3
                                            set @INSERTSQL = @INSERTSQL + '@CURRENCYIDPARAMETER, ';
                                        set @INSERTSQL = @INSERTSQL + '@COMMENTPARAMETER, @CHANGEAGENTIDPARAMETER, @CHANGEAGENTIDPARAMETER, @CURRENTDATEPARAMETER, @CURRENTDATEPARAMETER, @STARTDATEPARAMETER, @ENDDATEPARAMETER from dbo.CONSTITUENT SELECTEDCONSTITUENT ' + @SECURITYCLAUSE;

                                        /* We don't want to add a duplicate attribute value so we need to check if the value already exists before inserting the record. */
                                        set @INSERTSQL = @INSERTSQL + ' and SELECTEDCONSTITUENT.ID not in(select ID from dbo.[' + @ATTRIBUTETABLENAME + '])';
                                    end
                                else
                                    begin
                                        set @INSERTSQL = 'insert into dbo.[' + @ATTRIBUTETABLENAME + '] (ID, ' + @VALUECOLUMNNAME + ', ';
                                        if @DATATYPE = 3
                                            set @INSERTSQL = @INSERTSQL + 'CURRENCYID, ';
                                        set @INSERTSQL = @INSERTSQL + 'COMMENT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, STARTDATE, ENDDATE) select SELECTEDCONSTITUENT.ID, @VALUEPARAMETER, ';
                                        if @DATATYPE = 3
                                            set @INSERTSQL = @INSERTSQL + '@CURRENCYIDPARAMETER, ';
                                        set @INSERTSQL = @INSERTSQL + '@COMMENTPARAMETER, @CHANGEAGENTIDPARAMETER, @CHANGEAGENTIDPARAMETER, @CURRENTDATEPARAMETER, @CURRENTDATEPARAMETER, @STARTDATEPARAMETER, @ENDDATEPARAMETER from dbo.CONSTITUENT SELECTEDCONSTITUENT ';

                                        /* We don't want to add a duplicate attribute value so we need to check if the value already exists before inserting the record. */
                                        set @INSERTSQL = @INSERTSQL + ' where SELECTEDCONSTITUENT.ID not in(select ID from dbo.[' + @ATTRIBUTETABLENAME + '])';
                                    end

                                /* If overwriting the exiting value we must only insert records that don't already exist in the attribute table */
                                if @OVERWRITEEXISTINGVALUE = 1 begin
                                    set @UPDATESQL = 'update dbo.[' + @ATTRIBUTETABLENAME + '] set ' + @VALUECOLUMNNAME + ' = @VALUEPARAMETER, ';
                                    if @DATATYPE = 3
                                        set @UPDATESQL = @UPDATESQL + 'CURRENCYID = @CURRENCYIDPARAMETER, ';
                                    set @UPDATESQL = @UPDATESQL + 'COMMENT = @COMMENTPARAMETER, CHANGEDBYID = @CHANGEAGENTIDPARAMETER, DATECHANGED = @CURRENTDATEPARAMETER, STARTDATE = @STARTDATEPARAMETER, ENDDATE = @ENDDATEPARAMETER from dbo.[' + @ATTRIBUTETABLENAME + '] SELECTEDCONSTITUENT ';

                                    if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0 begin
                                        set @UPDATESQL = @UPDATESQL + @SECURITYCLAUSE;
                                    end
                                end
                            end
                        else
                            begin
                                if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0 
                                    begin
                                        set @INSERTSQL = 'insert into dbo.[' + @ATTRIBUTETABLENAME + '] (ID, CONSTITUENTID, ' + @VALUECOLUMNNAME + ', ';
                                        if @DATATYPE = 3
                                            set @INSERTSQL = @INSERTSQL + 'CURRENCYID, ';
                                        set @INSERTSQL = @INSERTSQL + 'COMMENT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, STARTDATE, ENDDATE) select newid(), SELECTEDCONSTITUENT.ID, @VALUEPARAMETER, ';
                                        if @DATATYPE = 3
                                            set @INSERTSQL = @INSERTSQL + '@CURRENCYIDPARAMETER, ';
                                        set @INSERTSQL = @INSERTSQL + '@COMMENTPARAMETER, @CHANGEAGENTIDPARAMETER, @CHANGEAGENTIDPARAMETER, @CURRENTDATEPARAMETER, @CURRENTDATEPARAMETER, @STARTDATEPARAMETER, @ENDDATEPARAMETER from dbo.CONSTITUENT SELECTEDCONSTITUENT ' + @SECURITYCLAUSE;
                                    end
                                else
                                    begin
                                        set @INSERTSQL = 'insert into dbo.[' + @ATTRIBUTETABLENAME + '] (ID, CONSTITUENTID, ' + @VALUECOLUMNNAME + ', ';
                                        if @DATATYPE = 3
                                            set @INSERTSQL = @INSERTSQL + 'CURRENCYID, ';
                                        set @INSERTSQL = @INSERTSQL + 'COMMENT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, STARTDATE, ENDDATE) select newid(), SELECTEDCONSTITUENT.ID, @VALUEPARAMETER, ';
                                        if @DATATYPE = 3
                                            set @INSERTSQL = @INSERTSQL + '@CURRENCYIDPARAMETER, ';
                                        set @INSERTSQL = @INSERTSQL + '@COMMENTPARAMETER, @CHANGEAGENTIDPARAMETER, @CHANGEAGENTIDPARAMETER, @CURRENTDATEPARAMETER, @CURRENTDATEPARAMETER, @STARTDATEPARAMETER, @ENDDATEPARAMETER from dbo.CONSTITUENT SELECTEDCONSTITUENT ';
                                    end

                                /* If overwriting the existing value we must only insert records that don't already exist in the attribute table */
                                if @OVERWRITEEXISTINGVALUE = 1 begin    

                                    /* Don't insert new values for entries that will be overwritten */
                                    set @INSERTSQL = @INSERTSQL + ' where SELECTEDCONSTITUENT.ID not in(select CONSTITUENTID from dbo.[' + @ATTRIBUTETABLENAME + '])';

                                    set @UPDATESQL = 'update dbo.[' + @ATTRIBUTETABLENAME + '] set ' + @VALUECOLUMNNAME + ' = @VALUEPARAMETER, ';
                                    if @DATATYPE = 3
                                        set @UPDATESQL = @UPDATESQL + 'CURRENCYID = @CURRENCYIDPARAMETER, ';
                                    set @UPDATESQL = @UPDATESQL + 'COMMENT = @COMMENTPARAMETER, CHANGEDBYID = @CHANGEAGENTIDPARAMETER, DATECHANGED = @CURRENTDATEPARAMETER, STARTDATE = @STARTDATEPARAMETER, ENDDATE = @ENDDATEPARAMETER from dbo.[' + @ATTRIBUTETABLENAME + '] SELECTEDCONSTITUENT ';

                                    if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0 begin
                                        set @UPDATESQL = @UPDATESQL + @MULTIPLEATTRIBUTESECURITYCLAUSE
                                    end
                                end
                            end
                    end

                begin try
                    /* @VALUEPARAMETER definition must change based on attribute data type */
                    if @DATATYPE = 0 
                        begin
                            set @PARAMETERDEFINITION = @PARAMETERDEFINITION + ', @VALUEPARAMETER nvarchar(250)';

                            if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0
                                begin
                                    set @PARAMETERDEFINITION = @PARAMETERDEFINITION + @SECURITYPARAMETERS;

                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION, @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @STRINGVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION, @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @STRINGVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;

                                end

                            else
                                begin
                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @STRINGVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @STRINGVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;
                                end

                        end

                    else if @DATATYPE = 1 
                        begin
                            set @PARAMETERDEFINITION = @PARAMETERDEFINITION + ', @VALUEPARAMETER int';

                            if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0
                                begin
                                    set @PARAMETERDEFINITION = @PARAMETERDEFINITION + @SECURITYPARAMETERS;

                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @NUMBERVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @NUMBERVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;

                                end

                            else
                                begin
                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @NUMBERVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @NUMBERVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;
                                end
                        end

                    else if @DATATYPE = 2 
                        begin
                            set @PARAMETERDEFINITION = @PARAMETERDEFINITION + ', @VALUEPARAMETER datetime';

                            if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0
                                begin
                                    set @PARAMETERDEFINITION = @PARAMETERDEFINITION + @SECURITYPARAMETERS;

                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @DATEVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @DATEVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;

                                end

                            else
                                begin
                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @DATEVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @DATEVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;
                                end
                        end

                    else if @DATATYPE = 3 
                        begin
                            set @PARAMETERDEFINITION = @PARAMETERDEFINITION + ', @VALUEPARAMETER money';

                            if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0
                                begin
                                    set @PARAMETERDEFINITION = @PARAMETERDEFINITION + @SECURITYPARAMETERS;

                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION, @CURRENCYIDPARAMETER = @CURRENCYID, @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @MONEYVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION, @CURRENCYIDPARAMETER = @CURRENCYID, @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @MONEYVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;

                                end

                            else
                                begin
                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION, @CURRENCYIDPARAMETER = @CURRENCYID, @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @MONEYVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION, @CURRENCYIDPARAMETER = @CURRENCYID, @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @MONEYVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;
                                end

                        end

                    else if @DATATYPE = 4 
                        begin
                            set @PARAMETERDEFINITION = @PARAMETERDEFINITION + ', @VALUEPARAMETER bit';

                            if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0
                                begin
                                    set @PARAMETERDEFINITION = @PARAMETERDEFINITION + @SECURITYPARAMETERS;

                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @BOOLEANVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @BOOLEANVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;

                                end

                            else
                                begin
                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @BOOLEANVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @BOOLEANVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;
                                end
                        end

                    else if @DATATYPE = 5 
                        begin
                            set @PARAMETERDEFINITION = @PARAMETERDEFINITION + ', @VALUEPARAMETER uniqueidentifier';

                            if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0
                                begin
                                    set @PARAMETERDEFINITION = @PARAMETERDEFINITION + @SECURITYPARAMETERS;

                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @CODETABLEVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @CODETABLEVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;

                                end

                            else
                                begin
                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @CODETABLEVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @CODETABLEVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;
                                end
                        end

                    else if @DATATYPE = 6 
                        begin
                            set @PARAMETERDEFINITION = @PARAMETERDEFINITION + ', @VALUEPARAMETER uniqueidentifier';

                            if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0
                                begin
                                    set @PARAMETERDEFINITION = @PARAMETERDEFINITION + @SECURITYPARAMETERS;

                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @CONSTITUENTIDVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @CONSTITUENTIDVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;

                                end

                            else
                                begin
                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @CONSTITUENTIDVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @CONSTITUENTIDVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;
                                end
                        end

                    else if @DATATYPE = 7 
                        begin
                            set @PARAMETERDEFINITION = @PARAMETERDEFINITION + ', @VALUEPARAMETER udt_fuzzydate';

                            if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0
                                begin
                                    set @PARAMETERDEFINITION = @PARAMETERDEFINITION + @SECURITYPARAMETERS;

                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @FUZZYDATEVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @FUZZYDATEVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;

                                end

                            else
                                begin
                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @FUZZYDATEVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @FUZZYDATEVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;
                                end
                        end

                    else if @DATATYPE = 8
                        begin
                            set @PARAMETERDEFINITION = @PARAMETERDEFINITION + ', @VALUEPARAMETER udt_hourminute';

                            if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0
                                begin
                                    set @PARAMETERDEFINITION = @PARAMETERDEFINITION + @SECURITYPARAMETERS;

                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @HOURMINUTEVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @HOURMINUTEVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;

                                end

                            else
                                begin
                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @HOURMINUTEVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @HOURMINUTEVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;
                                end
                        end

                    else if @DATATYPE = 9 
                        begin
                            set @PARAMETERDEFINITION = @PARAMETERDEFINITION + ', @VALUEPARAMETER nvarchar(max)';

                            if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0
                                begin
                                    set @PARAMETERDEFINITION = @PARAMETERDEFINITION + @SECURITYPARAMETERS;

                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @MEMOVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @MEMOVALUE, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;

                                end

                            else
                                begin
                                    if @UPDATESQL <> '' begin
                                        exec sp_executesql @UPDATESQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @MEMOVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                        set @NUMBEREDITED = @@ROWCOUNT;
                                    end

                                    exec sp_executesql @INSERTSQL, @PARAMETERDEFINITION,  @COMMENTPARAMETER = @COMMENT, @CHANGEAGENTIDPARAMETER = @CHANGEAGENTID, @CURRENTDATEPARAMETER = @CURRENTDATE, @VALUEPARAMETER = @MEMOVALUE, @STARTDATEPARAMETER = @STARTDATE, @ENDDATEPARAMETER = @ENDDATE;
                                    set @NUMBERADDED = @@ROWCOUNT;
                                end
                        end

                    if @SELECTION <> '' begin
                        set @SELECTIONTABLESQL = 'drop table ' + @SELECTION;
                        exec sp_executesql @SELECTIONTABLESQL 
                    end
                end try

                begin catch
                    if @SELECTION <> '' begin
                        set @SELECTIONTABLESQL = 'drop table ' + @SELECTION;
                        exec sp_executesql @SELECTIONTABLESQL 
                    end

                    exec dbo.USP_RAISE_ERROR;
                    return 1;
                end catch