USP_EVENTATTRIBUTE_COPY

Copies attributes from one event to another event.

Parameters

Parameter Parameter Type Mode Description
@SOURCEID uniqueidentifier IN
@DESTINATIONID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


            CREATE procedure dbo.USP_EVENTATTRIBUTE_COPY(
                @SOURCEID uniqueidentifier,
                @DESTINATIONID uniqueidentifier,
                @CHANGEAGENTID uniqueidentifier = null
            )
            with execute as caller
            as
                set nocount on;
                -- Cannot copy if the source event does not exist

                if not exists (select ID from dbo.EVENT where ID = @SOURCEID)
                    raiserror('The source event specified does not exist.',13,1);

                declare @CURRENTDATE datetime;
                set @CURRENTDATE = getdate();

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

                declare @TABLENAME nvarchar(50);
                declare @ONLYALLOWONEPERRECORD bit;
                declare @VALUECOLUMNNAME nvarchar(128);
                declare @DATATYPECODE tinyint;

                declare @SOURCETABLE table(
                    TABLENAME nvarchar(50),
                    ONLYALLOWONEPERRECORD bit,
                    VALUECOLUMNNAME nvarchar(128),
                    DATATYPECODE tinyint
                );

                insert into @SOURCETABLE
                    (TABLENAME, ONLYALLOWONEPERRECORD, VALUECOLUMNNAME, DATATYPECODE)
                    (select TABLECATALOG.TABLENAME, ATTRIBUTECATEGORY.ONLYALLOWONEPERRECORD, ATTRIBUTECATEGORY.VALUECOLUMNNAME, ATTRIBUTECATEGORY.DATATYPECODE
                        from ATTRIBUTECATEGORY
                        inner join TABLECATALOG on TABLECATALOG.ID = TABLECATALOGID
                        inner join ATTRIBUTERECORDTYPE on ATTRIBUTERECORDTYPE.ID = ATTRIBUTERECORDTYPEID
                        inner join RECORDTYPE on RECORDTYPE.ID = RECORDTYPEID
                        where RECORDTYPE.NAME = 'Event');

                declare @EXISTINGID uniqueidentifier;
                declare @SQL nvarchar(1000);

                declare SOURCECURSOR cursor for
                select
                    TABLENAME,
                    ONLYALLOWONEPERRECORD,
                    VALUECOLUMNNAME,
                    DATATYPECODE
                from
                    @SOURCETABLE;

                open SOURCECURSOR;

                fetch
                    SOURCECURSOR
                into
                    @TABLENAME,
                    @ONLYALLOWONEPERRECORD,
                    @VALUECOLUMNNAME,
                    @DATATYPECODE;

                while @@fetch_status = 0
                begin
                    declare @CURRENCYCOLUMNS nvarchar(100) = '';

                    if @DATATYPECODE = 3 set @CURRENCYCOLUMNS = ',CURRENCYID,ORGANIZATIONEXCHANGERATEID,ORGANIZATIONVALUE';

                    if @ONLYALLOWONEPERRECORD = 1
                    begin
                        --Bug 134322 - AdamBu - 12/16/10 - Reset EXISTINGID or else we won't copy any one per

                        --    attributes after finding the first one that is already on the designation event.

                        set @EXISTINGID = null
                        set @SQL = 'select @EXISTINGID = ID from dbo.' + @TABLENAME + ' where ID = ' + '''' + convert(nvarchar(36), @DESTINATIONID) + ''''
                        exec sp_executesql
                            @QUERY = @SQL
                            @PARAMS = N'@EXISTINGID uniqueidentifier output'
                            @EXISTINGID = @EXISTINGID output 

                        if @EXISTINGID is null
                        begin
                            set @SQL = '                        
                            insert into dbo.' + @TABLENAME + '
                                (
                                    ID, 
                                    ' + @VALUECOLUMNNAME + ',
                                    COMMENT,
                                    ADDEDBYID,
                                    CHANGEDBYID,
                                    DATEADDED,
                                    DATECHANGED' + 
                                    @CURRENCYCOLUMNS +
                                    ')
                                (
                                    select
                                        ' + '''' + convert(nvarchar(36), @DESTINATIONID) + '''' + ',
                                        ' + @VALUECOLUMNNAME + ',
                                        COMMENT,
                                        ' + '''' + convert(nvarchar(36), @CHANGEAGENTID) + '''' + ',
                                        ' + '''' + convert(nvarchar(36), @CHANGEAGENTID) + '''' + ',
                                        ' + '''' + convert(nvarchar(50), @CURRENTDATE) + '''' + ',
                                        ' + '''' + convert(nvarchar(50), @CURRENTDATE) + '''' + 
                                        @CURRENCYCOLUMNS + '
                                    from 
                                        ' + @TABLENAME + '
                                    where
                                        ID = ' + '''' + convert(nvarchar(36), @SOURCEID) + '''' + 
                                ');'

                            exec(@SQL);
                        end
                    end

                    if @ONLYALLOWONEPERRECORD = 0
                    begin
                        set @SQL = '
                        insert into dbo.' + @TABLENAME + '
                            (
                                EVENTID,
                                ' + @VALUECOLUMNNAME + ',
                                COMMENT,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED' +
                                @CURRENCYCOLUMNS +  
                            ')
                            (
                                select
                                    ' + '''' + convert(nvarchar(50), @DESTINATIONID) + '''' + ',
                                    ' + @VALUECOLUMNNAME + ',
                                    COMMENT,
                                    ' + '''' + convert(nvarchar(50), @CHANGEAGENTID) + '''' + ',
                                    ' + '''' + convert(nvarchar(50), @CHANGEAGENTID) + '''' + ',
                                    ' + '''' + convert(nvarchar(50), @CURRENTDATE) + '''' + ',
                                    ' + '''' + convert(nvarchar(50), @CURRENTDATE) + '''' + 
                                    @CURRENCYCOLUMNS + '
                                from
                                    ' + @TABLENAME + '
                                where
                                    EVENTID = ' + '''' + convert(nvarchar(50), @SOURCEID) + '''' + 
                            ');'

                        exec(@SQL);
                    end

                    fetch
                        SOURCECURSOR
                    into
                        @TABLENAME,
                        @ONLYALLOWONEPERRECORD,
                        @VALUECOLUMNNAME,
                        @DATATYPECODE;
                end
                close SOURCECURSOR;
                deallocate SOURCECURSOR;

                return 0;