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;