USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@IDSETREGISTERID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@ASOF | datetime | IN | |
@NUMBERADDED | int | INOUT | |
@NUMBEREDITED | int | INOUT | |
@NUMBERDELETED | int | INOUT | |
@RECORDTYPECODE | tinyint | IN | |
@CHOSENITEMS | xml | IN | |
@ACTIONID | int | IN | |
@PREVIOUSVALUE | uniqueidentifier | IN | |
@VALUE | nvarchar(255) | IN | |
@LISTVALUE | uniqueidentifier | IN | |
@ATTRIBUTECATEGORY | uniqueidentifier | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@DATEVALUE | datetime | IN | |
@FUZZYDATEVALUE | UDT_FUZZYDATE | IN | |
@TIMEVALUE | UDT_HOURMINUTE | IN | |
@CURRENCYVALUE | money | IN | |
@NUMBERVALUE | int | IN | |
@CODETABLEVALUE | uniqueidentifier | IN | |
@MEMOVALUE | nvarchar(max) | IN | |
@CURRENCYID | uniqueidentifier | IN | |
@INCLUDECOMMENT | bit | IN | |
@COMMENTACTION | tinyint | IN | |
@COMMENTTEXT | nvarchar(255) | IN |
Definition
Copy
CREATE procedure dbo.USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE
(
@IDSETREGISTERID uniqueidentifier = null,
@CHANGEAGENTID uniqueidentifier = null,
@ASOF as datetime = null,
@NUMBERADDED int = 0 output,
@NUMBEREDITED int = 0 output,
@NUMBERDELETED int = 0 output,
@RECORDTYPECODE tinyint = 0,
@CHOSENITEMS xml = null,
@ACTIONID int = 0,
@PREVIOUSVALUE uniqueidentifier = null,
@VALUE nvarchar(255) = null,
@LISTVALUE uniqueidentifier = null,
@ATTRIBUTECATEGORY uniqueidentifier = null,
@CONSTITUENTID uniqueidentifier = null,
@DATEVALUE datetime = null,
@FUZZYDATEVALUE dbo.UDT_FUZZYDATE = '00000000',
@TIMEVALUE dbo.UDT_HOURMINUTE = '0000',
@CURRENCYVALUE money = null,
@NUMBERVALUE int = 0,
@CODETABLEVALUE uniqueidentifier = null,
@MEMOVALUE nvarchar(max) = null,
@CURRENCYID uniqueidentifier = null,
@INCLUDECOMMENT bit = 0,
@COMMENTACTION tinyint = 255,
@COMMENTTEXT nvarchar(255)
)
with execute as owner
as
set nocount off;
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate();
set @NUMBERADDED = 0;
set @NUMBEREDITED = 0;
set @NUMBERDELETED = 0;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
begin try
if @RECORDTYPECODE in (1,2)
begin
if object_id('tempdb..#USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_ADD') is not null
begin
drop table #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_ADD;
end;
create table #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_ADD(ID uniqueidentifier primary key);
if object_id('tempdb..#USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_UPDATE') is not null
begin
drop table #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_UPDATE;
end;
create table #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_UPDATE(ID uniqueidentifier primary key);
if object_id('tempdb..#USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_DELETE') is not null
begin
drop table #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_DELETE;
end;
create table #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_DELETE(ID uniqueidentifier primary key);
if object_id('tempdb..#USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_SELECTION') is not null
begin
drop table #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_SELECTION;
end;
create table #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_SELECTION(ID uniqueidentifier primary key);
insert into #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_SELECTION
select distinct ID from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@IDSETREGISTERID)
where @IDSETREGISTERID is not null
union all
select ID from dbo.DESIGNATION
where @IDSETREGISTERID is null and @RECORDTYPECODE = 1
union all
select ID from dbo.DESIGNATIONLEVEL
where @IDSETREGISTERID is null and @RECORDTYPECODE = 2;
declare @TABLECATALOGID uniqueidentifier;
declare @TABLENAME nvarchar(41) = 'ATTRIBUTE'
declare @VALUECOLUMNNAME nvarchar(128);
declare @IDENTITYCOLUMN nvarchar(max);
declare @DATATYPECODE tinyint;
declare @ONEPERRECORD bit;
declare @BOOLEANVALUE bit;
declare @PREVIOUSBOOLEANVALUE nvarchar(2);
declare @STARTDATE datetime;
declare @ENDDATE datetime;
declare @STARTDATEACTION tinyint = 255;
declare @ENDDATEACTION tinyint = 255;
select
@STARTDATE = T.c.value('(NEWVALUE)[1]', 'datetime'),
@STARTDATEACTION = T.c.value('(SELECTEDACTION)[1]', 'int')
from @CHOSENITEMS.nodes('//CHOSENITEMS/ITEM') T(c)
where T.c.value('(ID)[1]', 'int') = 0;
if @STARTDATEACTION not in (1,2)
set @STARTDATE = null;
select
@ENDDATE = T.c.value('(NEWVALUE)[1]', 'datetime'),
@ENDDATEACTION = T.c.value('(SELECTEDACTION)[1]', 'int')
from @CHOSENITEMS.nodes('//CHOSENITEMS/ITEM') T(c)
where T.c.value('(ID)[1]', 'int') = 1;
if @ENDDATEACTION not in (1,2)
set @ENDDATE = null;
if @INCLUDECOMMENT = 0
set @COMMENTACTION = 255;
else if @COMMENTACTION = 3
set @COMMENTTEXT = '';
select
@TABLECATALOGID = ATTRIBUTECATEGORY.TABLECATALOGID,
@DATATYPECODE = ATTRIBUTECATEGORY.DATATYPECODE,
@TABLENAME = TABLECATALOG.TABLENAME,
@ONEPERRECORD = ATTRIBUTECATEGORY.ONLYALLOWONEPERRECORD,
@VALUECOLUMNNAME = ATTRIBUTECATEGORY.VALUECOLUMNNAME
from dbo.ATTRIBUTECATEGORY
inner join dbo.TABLECATALOG on TABLECATALOG.ID = ATTRIBUTECATEGORY.TABLECATALOGID
where ATTRIBUTECATEGORY.ID = @ATTRIBUTECATEGORY;
if @DATATYPECODE = 4
if @LISTVALUE = '00000000-0000-0000-0000-000000000001'
set @BOOLEANVALUE = 0;
else
set @BOOLEANVALUE = 1;
select
@IDENTITYCOLUMN =
case @ONEPERRECORD
when 1 then 'ID'
when 0 then
case @RECORDTYPECODE
when 1 then 'DESIGNATIONID'
when 2 then 'DESIGNATIONLEVELID'
end
end;
declare @SQL nvarchar(max) = N'';
declare @PARAMDEF nvarchar(max) = '';
if @DATATYPECODE = 4
if @PREVIOUSVALUE = '00000000-0000-0000-0000-000000000001'
set @PREVIOUSBOOLEANVALUE = 0;
else
set @PREVIOUSBOOLEANVALUE = 1;
if @ACTIONID in (1,2) -- Add value if it does not exist
begin
set @SQL = @SQL + N'
insert into #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_ADD (ID)
select
SELECTION.ID
from #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_SELECTION as SELECTION
where not exists (select 1 from dbo.' + @TABLENAME + N' where ' + @IDENTITYCOLUMN + N' = SELECTION.ID ';
if @ONEPERRECORD = 0
set @SQL = @SQL + N' and ' + @VALUECOLUMNNAME + N' = @NEWVALUE);
';
else
set @SQL = @SQL + N');
';
end
if @ACTIONID = 2 -- [Add value if it does not exist and] overwrite existing values
begin
if @ONEPERRECORD = 1
set @SQL = @SQL + N'
insert into #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_UPDATE (ID)
select
ATTRIBUTETABLE.ID
from #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_SELECTION as SELECTION
inner join dbo.' + @TABLENAME + N' as ATTRIBUTETABLE on ATTRIBUTETABLE.' + @IDENTITYCOLUMN + N' = SELECTION.ID;
';
end
else if @ACTIONID = 3 -- Replace existing value
begin
if @ONEPERRECORD = 0
begin
set @SQL = @SQL + N'
insert into #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_UPDATE (ID)
select
ATTRIBUTETABLE.ID
from #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_SELECTION as SELECTION
inner join dbo.' + @TABLENAME + N' as ATTRIBUTETABLE on ATTRIBUTETABLE.' + @IDENTITYCOLUMN + N' = SELECTION.ID
where ATTRIBUTETABLE.' + @VALUECOLUMNNAME + N' ='
if @DATATYPECODE=4
set @SQL = @SQL + N''+@PREVIOUSBOOLEANVALUE+ '';
else
set @SQL = @SQL + N'(select ' + @VALUECOLUMNNAME + N' from dbo.' + @TABLENAME + N' where ID = @PREVIOUSVALUE)
';
if @DATATYPECODE = 3
set @SQL = @SQL + N'
and ATTRIBUTETABLE.CURRENCYID = (select CURRENCYID from dbo.' + @TABLENAME + N' where ID = @PREVIOUSVALUE)
';
set @SQL = @SQL + N';';
end
end
else if @ACTIONID = 4 -- Delete value if it exists
begin
set @SQL = @SQL + N'
insert into #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_DELETE (ID)
select
ATTRIBUTETABLE.ID
from #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_SELECTION as SELECTION
inner join dbo.' + @TABLENAME + N' as ATTRIBUTETABLE on ATTRIBUTETABLE.' + @IDENTITYCOLUMN + N' = SELECTION.ID
where ATTRIBUTETABLE.' + @VALUECOLUMNNAME + N' = @NEWVALUE;
';
end
else if @ACTIONID = 5 -- Delete all values for this attribute category
begin
if @ONEPERRECORD = 0
set @SQL = @SQL + N'
insert into #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_DELETE (ID)
select
ATTRIBUTETABLE.ID
from #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_SELECTION as SELECTION
inner join dbo.' + @TABLENAME + N' as ATTRIBUTETABLE on ATTRIBUTETABLE.' + @IDENTITYCOLUMN + N' = SELECTION.ID;
';
end
set @SQL = @SQL + N'
insert into dbo.' + @TABLENAME + '
(
ID,
';
if @ONEPERRECORD = 0 set @SQL = @SQL + @IDENTITYCOLUMN + N', ';
set @SQL = @SQL + N'
' + @VALUECOLUMNNAME + N',
';
if @COMMENTACTION in (1,2) set @SQL = @SQL + N'COMMENT, ';
if @STARTDATEACTION in (1,2) set @SQL = @SQL + N'STARTDATE, ';
if @ENDDATEACTION in (1,2) set @SQL = @SQL + N'ENDDATE, ';
set @SQL = @SQL + N'
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
';
if @DATATYPECODE = 3 set @SQL = @SQL + N',CURRENCYID ,ORGANIZATIONEXCHANGERATEID, ORGANIZATIONVALUE ';
set @SQL = @SQL + N'
)
select
';
if @ONEPERRECORD = 0 set @SQL = @SQL + N'newid(), ';
set @SQL = @SQL + N'
RECORD.ID,
@NEWVALUE,
';
if @COMMENTACTION in (1,2) set @SQL = @SQL + N'@COMMENTTEXT, ';
if @STARTDATEACTION in (1,2) set @SQL = @SQL + N'@STARTDATE, ';
if @ENDDATEACTION in (1,2) set @SQL = @SQL + N'@ENDDATE, ';
set @SQL = @SQL + N'
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
';
if @DATATYPECODE = 3 set @SQL = @SQL + N',@CURRENCYID, CURRENCYVALUE.ORGANIZATIONEXCHANGERATEID, CURRENCYVALUE.ORGANIZATIONAMOUNT ';
set @SQL = @SQL + N'
from #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_ADD as RECORD';
if @DATATYPECODE = 3 set @SQL = @SQL + N'
cross join dbo.UFN_CURRENCY_GETCURRENCYVALUES_2(@NEWVALUE,@CURRENTDATE,@CURRENCYID,null,null,null,null,null,null,1) as CURRENCYVALUE';
set @SQL = @SQL + N';
';
--Remove records from update with date fields that would violate the table constraint, CK_#TABLENAME#_VALIDDATERANGE
if (@STARTDATEACTION in (1,2) and @ENDDATEACTION <> 3) or (@STARTDATEACTION <> 3 and @ENDDATEACTION in (1,2))
begin
set @SQL = @SQL + N'
delete from #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_UPDATE
from #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_UPDATE as SELECTION
inner join dbo.' + @TABLENAME + N' as ATTRIBUTETABLE on ATTRIBUTETABLE.ID = SELECTION.ID
where (
';
if @ENDDATEACTION in (1,2)
begin
set @SQL = @SQL + N'ATTRIBUTETABLE.STARTDATE is not null and ATTRIBUTETABLE.STARTDATE > @ENDDATE
';
if @STARTDATEACTION <> 2 and @ENDDATEACTION = 1
set @SQL = @SQL + N'and ATTRIBUTETABLE.ENDDATE is null
';
end
if @STARTDATEACTION in (1, 2) and @ENDDATEACTION in (1, 2)
set @SQL = @SQL + N'
) or (
';
if @STARTDATEACTION in (1,2)
begin
set @SQL = @SQL + N'ATTRIBUTETABLE.ENDDATE is not null and ATTRIBUTETABLE.ENDDATE < @STARTDATE
';
if @STARTDATEACTION = 1 and @ENDDATEACTION <> 2
set @SQL = @SQL + N'and ATTRIBUTETABLE.STARTDATE is null
';
end
set @SQL = @SQL + N');
';
end
set @SQL = @SQL + N'
update
dbo.' + @TABLENAME + N'
set
' + @VALUECOLUMNNAME + N' = @NEWVALUE,
';
if @COMMENTACTION = 1 set @SQL = @SQL + N'COMMENT = case when len(COMMENT) = 0 then @COMMENTTEXT else COMMENT end, ';
else if @COMMENTACTION in (2,3) set @SQL = @SQL + N'COMMENT = @COMMENTTEXT, ';
if @STARTDATEACTION = 1 set @SQL = @SQL + N'STARTDATE = case when STARTDATE is null then @STARTDATE else STARTDATE end, ';
else if @STARTDATEACTION in (2,3) set @SQL = @SQL + N'STARTDATE = @STARTDATE, ';
if @ENDDATEACTION = 1 set @SQL = @SQL + N'ENDDATE = case when ENDDATE is null then @ENDDATE else ENDDATE end, ';
else if @ENDDATEACTION in (2,3) set @SQL = @SQL + N'ENDDATE = @ENDDATE, ';
set @SQL = @SQL + N'
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
';
if @DATATYPECODE = 3 set @SQL = @SQL + N',CURRENCYID = @CURRENCYID, ORGANIZATIONEXCHANGERATEID = CURRENCYVALUE.ORGANIZATIONEXCHANGERATEID, ORGANIZATIONVALUE = CURRENCYVALUE.ORGANIZATIONAMOUNT ';
set @SQL = @SQL + N'
from dbo.' + @TABLENAME;
if @DATATYPECODE = 3 set @SQL = @SQL + N'
cross apply dbo.UFN_CURRENCY_GETCURRENCYVALUES_2(@NEWVALUE,DATEADDED,@CURRENCYID,null,null,null,null,null,null,1) as CURRENCYVALUE';
set @SQL = @SQL + N'
where
ID in (select ID from #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_UPDATE);
';
set @SQL = @SQL + N'
delete from dbo.' + @TABLENAME + N' where ID in (select ID from #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_DELETE);
';
set @PARAMDEF = '
@COMMENTTEXT nvarchar(255),
@STARTDATE datetime,
@ENDDATE datetime,
@CHANGEAGENTID uniqueidentifier,
@CURRENTDATE datetime,
@CURRENCYID uniqueidentifier,
@PREVIOUSVALUE uniqueidentifier,
@NEWVALUE ';
select
@PARAMDEF = @PARAMDEF +
case @DATATYPECODE
when 0 then 'nvarchar(255)'
when 1 then 'int'
when 2 then 'datetime'
when 3 then 'money'
when 4 then 'bit'
when 5 then 'uniqueidentifier'
when 6 then 'uniqueidentifier'
when 7 then 'dbo.UDT_FUZZYDATE'
when 8 then 'dbo.UDT_HOURMINUTE'
when 9 then 'nvarchar(max)'
end;
if @DATATYPECODE = 0
exec sp_executesql @SQL, @PARAMDEF, @COMMENTTEXT, @STARTDATE, @ENDDATE, @CHANGEAGENTID, @CURRENTDATE, @CURRENCYID, @PREVIOUSVALUE, @VALUE;
else if @DATATYPECODE = 1
exec sp_executesql @SQL, @PARAMDEF, @COMMENTTEXT, @STARTDATE, @ENDDATE, @CHANGEAGENTID, @CURRENTDATE, @CURRENCYID, @PREVIOUSVALUE, @NUMBERVALUE;
else if @DATATYPECODE = 2
exec sp_executesql @SQL, @PARAMDEF, @COMMENTTEXT, @STARTDATE, @ENDDATE, @CHANGEAGENTID, @CURRENTDATE, @CURRENCYID, @PREVIOUSVALUE, @DATEVALUE;
else if @DATATYPECODE = 3
exec sp_executesql @SQL, @PARAMDEF, @COMMENTTEXT, @STARTDATE, @ENDDATE, @CHANGEAGENTID, @CURRENTDATE, @CURRENCYID, @PREVIOUSVALUE, @CURRENCYVALUE;
else if @DATATYPECODE = 4
exec sp_executesql @SQL, @PARAMDEF, @COMMENTTEXT, @STARTDATE, @ENDDATE, @CHANGEAGENTID, @CURRENTDATE, @CURRENCYID, @PREVIOUSVALUE, @BOOLEANVALUE;
else if @DATATYPECODE = 5
exec sp_executesql @SQL, @PARAMDEF, @COMMENTTEXT, @STARTDATE, @ENDDATE, @CHANGEAGENTID, @CURRENTDATE, @CURRENCYID, @PREVIOUSVALUE, @CODETABLEVALUE;
else if @DATATYPECODE = 6
exec sp_executesql @SQL, @PARAMDEF, @COMMENTTEXT, @STARTDATE, @ENDDATE, @CHANGEAGENTID, @CURRENTDATE, @CURRENCYID, @PREVIOUSVALUE, @CONSTITUENTID;
else if @DATATYPECODE = 7
exec sp_executesql @SQL, @PARAMDEF, @COMMENTTEXT, @STARTDATE, @ENDDATE, @CHANGEAGENTID, @CURRENTDATE, @CURRENCYID, @PREVIOUSVALUE, @FUZZYDATEVALUE;
else if @DATATYPECODE = 8
exec sp_executesql @SQL, @PARAMDEF, @COMMENTTEXT, @STARTDATE, @ENDDATE, @CHANGEAGENTID, @CURRENTDATE, @CURRENCYID, @PREVIOUSVALUE, @TIMEVALUE;
else if @DATATYPECODE = 9
exec sp_executesql @SQL, @PARAMDEF, @COMMENTTEXT, @STARTDATE, @ENDDATE, @CHANGEAGENTID, @CURRENTDATE, @CURRENCYID, @PREVIOUSVALUE, @MEMOVALUE;
select
@NUMBERADDED = (select count(*) from #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_ADD),
@NUMBEREDITED = (select count(*) from #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_UPDATE),
@NUMBERDELETED = (select count(*) from #USP_GLOBALCHANGE_MANAGEPURPOSEDESIGNATIONATTRIBUTE_DELETE)
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch