USP_REGISTRANT_GETREGISTRATIONINFORMATION_UPDATEFROMXML
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REGISTRANTID | uniqueidentifier | IN | |
@REGISTRANTREGISTRATIONINFORMATION | xml | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_REGISTRANT_GETREGISTRATIONINFORMATION_UPDATEFROMXML
(
@REGISTRANTID uniqueidentifier,
@REGISTRANTREGISTRATIONINFORMATION xml,
@CHANGEAGENTID uniqueidentifier = null,
@CHANGEDATE datetime = null
)
as begin
set nocount on;
if @CHANGEAGENTID is null
exec USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CHANGEDATE is null
set @CHANGEDATE = getdate();
begin try
declare @contextCache varbinary(128) = CONTEXT_INFO();
set CONTEXT_INFO @CHANGEAGENTID;
-- Text, Multi-line text
merge into dbo.REGISTRANTREGISTRATIONINFORMATION as target
using (
select
ID,
REGISTRATIONINFORMATIONID,
TEXTVALUE,
PERSONDETAILTYPECODE
from dbo.UFN_REGISTRANT_GETREGISTRATIONINFORMATION_FROMITEMLISTXML(@REGISTRANTREGISTRATIONINFORMATION)
where RESPONSETYPECODE in (0,1,4) -- Text, Multi-line text
) as source
on target.REGISTRANTID = @REGISTRANTID
and target.REGISTRATIONINFORMATIONID = source.REGISTRATIONINFORMATIONID
and target.PERSONDETAILTYPECODE = source.PERSONDETAILTYPECODE
-- and target.ID = source.ID
when matched and target.TEXTVALUE <> source.TEXTVALUE then
update
set
target.TEXTVALUE = source.TEXTVALUE,
target.CHANGEDBYID = @CHANGEAGENTID,
target.DATECHANGED = @CHANGEDATE
when not matched by target then
insert (ID, REGISTRANTID, REGISTRATIONINFORMATIONID, REGISTRATIONINFORMATIONOPTIONID, TEXTVALUE, BOOLEANVALUE, PERSONDETAILTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (newID(), @REGISTRANTID, source.REGISTRATIONINFORMATIONID, null, source.TEXTVALUE, 0, source.PERSONDETAILTYPECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE)
when not matched by source and target.REGISTRANTID = @REGISTRANTID and (select RESPONSETYPECODE from dbo.REGISTRATIONINFORMATION where ID = target.REGISTRATIONINFORMATIONID) in (0,1,4) then
delete;
-- Dropdown list
merge into dbo.REGISTRANTREGISTRATIONINFORMATION as target
using (
select
ID,
REGISTRATIONINFORMATIONID,
REGISTRATIONINFORMATIONOPTIONID,
PERSONDETAILTYPECODE
from dbo.UFN_REGISTRANT_GETREGISTRATIONINFORMATION_FROMITEMLISTXML(@REGISTRANTREGISTRATIONINFORMATION)
where RESPONSETYPECODE = 2 -- Dropdown list
) as source
on target.REGISTRANTID = @REGISTRANTID
and target.REGISTRATIONINFORMATIONID = source.REGISTRATIONINFORMATIONID
and target.PERSONDETAILTYPECODE = source.PERSONDETAILTYPECODE
-- and target.ID = source.ID
when matched and (
(source.REGISTRATIONINFORMATIONOPTIONID is null and target.REGISTRATIONINFORMATIONOPTIONID is not null)
or (source.REGISTRATIONINFORMATIONOPTIONID is not null and target.REGISTRATIONINFORMATIONOPTIONID is null)
or (source.REGISTRATIONINFORMATIONOPTIONID <> target.REGISTRATIONINFORMATIONOPTIONID)
) then
update
set
target.REGISTRATIONINFORMATIONOPTIONID = source.REGISTRATIONINFORMATIONOPTIONID,
target.CHANGEDBYID = @CHANGEAGENTID,
target.DATECHANGED = @CHANGEDATE
when not matched by target then
insert (ID, REGISTRANTID, REGISTRATIONINFORMATIONID, REGISTRATIONINFORMATIONOPTIONID, TEXTVALUE, BOOLEANVALUE, PERSONDETAILTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (newID(), @REGISTRANTID, source.REGISTRATIONINFORMATIONID, source.REGISTRATIONINFORMATIONOPTIONID, '', 0, source.PERSONDETAILTYPECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE)
when not matched by source and target.REGISTRANTID = @REGISTRANTID and (select RESPONSETYPECODE from dbo.REGISTRATIONINFORMATION where ID = target.REGISTRATIONINFORMATIONID) = 2 then
delete;
-- Checkbox (Yes/No)
merge into dbo.REGISTRANTREGISTRATIONINFORMATION as target
using (
select
ID,
REGISTRATIONINFORMATIONID,
case isnull(REGISTRATIONINFORMATIONOPTIONID, '00000000-0000-0000-0000-000000000000')
when '00000000-0000-0000-0000-000000000000' then 0
when '11111111-1111-1111-1111-111111111111' then 1
end as BOOLEANVALUE,
PERSONDETAILTYPECODE
from dbo.UFN_REGISTRANT_GETREGISTRATIONINFORMATION_FROMITEMLISTXML(@REGISTRANTREGISTRATIONINFORMATION)
where RESPONSETYPECODE = 3 -- Checkbox (Yes/No)
) as source
on target.REGISTRANTID = @REGISTRANTID
and target.REGISTRATIONINFORMATIONID = source.REGISTRATIONINFORMATIONID
and target.PERSONDETAILTYPECODE = source.PERSONDETAILTYPECODE
-- and target.ID = source.ID
when matched and target.BOOLEANVALUE <> source.BOOLEANVALUE then
update
set
target.BOOLEANVALUE = source.BOOLEANVALUE,
target.CHANGEDBYID = @CHANGEAGENTID,
target.DATECHANGED = @CHANGEDATE
when not matched by target then
insert (ID, REGISTRANTID, REGISTRATIONINFORMATIONID, REGISTRATIONINFORMATIONOPTIONID, TEXTVALUE, BOOLEANVALUE, PERSONDETAILTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (newID(), @REGISTRANTID, source.REGISTRATIONINFORMATIONID, null, '', source.BOOLEANVALUE, source.PERSONDETAILTYPECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE)
when not matched by source and target.REGISTRANTID = @REGISTRANTID and (select RESPONSETYPECODE from dbo.REGISTRATIONINFORMATION where ID = target.REGISTRATIONINFORMATIONID) = 3 then
delete;
if @contextCache is not null
set CONTEXT_INFO @contextCache;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;
end