USP_BATCHCONSTITUENTUPDATE_GETEMAILADDRESSES_WITHDATES_2_UPDATEFROMXML
Used to update a set of records defined by UFN_BATCHCONSTITUENTUPDATE_GETEMAILADDRESSES_WITHDATES_2 from the given xml string.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@BATCHCONSTITUENTUPDATEID | uniqueidentifier | IN | |
@XML | xml | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN |
Definition
Copy
CREATE PROCEDURE dbo.USP_BATCHCONSTITUENTUPDATE_GETEMAILADDRESSES_WITHDATES_2_UPDATEFROMXML
(
@BATCHCONSTITUENTUPDATEID uniqueidentifier,
@XML xml,
@CHANGEAGENTID uniqueidentifier = null,
@CHANGEDATE datetime = null
)
as
set nocount on;
if @CHANGEAGENTID is null
exec USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
if @CHANGEDATE is null
set @CHANGEDATE = getdate()
-- build a temporary table containing the values from the XML
declare @TempTbl table (
[DONOTEMAIL] bit,
[EMAILADDRESS] nvarchar(100),
[EMAILADDRESSID] uniqueidentifier,
[EMAILADDRESSTYPECODEID] uniqueidentifier,
[ENDDATE] date,
[ID] uniqueidentifier,
[INFOSOURCECODEID] uniqueidentifier,
[ISPRIMARY] bit,
[ROWORIGINCODE] tinyint,
[SEQUENCE] int,
[STARTDATE] date,
[UPDATEHOUSEHOLD] bit,
[DONOTEMAILREASONCODEID] uniqueidentifier,
[INFOSOURCECOMMENTS] nvarchar(256)
)
insert into @TempTbl select
[DONOTEMAIL],
[EMAILADDRESS],
[EMAILADDRESSID],
[EMAILADDRESSTYPECODEID],
[ENDDATE],
[ID],
[INFOSOURCECODEID],
[ISPRIMARY],
[ROWORIGINCODE],
[SEQUENCE],
[STARTDATE],
[UPDATEHOUSEHOLD],
[DONOTEMAILREASONCODEID],
[INFOSOURCECOMMENTS]
from dbo.UFN_BATCHCONSTITUENTUPDATE_GETEMAILADDRESSES_WITHDATES_2_FROMITEMLISTXML(@XML)
update @TempTbl set ID = newid() where (ID is null) or (ID = '00000000-0000-0000-0000-000000000000');
if @@Error <> 0
return 1;
declare @contextCache varbinary(128);
declare @e int;
-- cache current context information
set @contextCache = CONTEXT_INFO();
-- set CONTEXT_INFO to @CHANGEAGENTID
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID;
-- delete any items that no longer exist in the XML table
delete from dbo.[BATCHCONSTITUENTUPDATEEMAILADDRESSES] where [BATCHCONSTITUENTUPDATEEMAILADDRESSES].ID in
(select ID from dbo.UFN_BATCHCONSTITUENTUPDATE_GETEMAILADDRESSES_WITHDATES_2
(
@BATCHCONSTITUENTUPDATEID
)
EXCEPT select ID from @TempTbl)
select @e=@@error;
-- reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
if @e <> 0
return 2;
update [dbo].[BATCHCONSTITUENTUPDATEEMAILADDRESSES]
set
[ISPRIMARY] = 0,
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CHANGEDATE
from
[dbo].[BATCHCONSTITUENTUPDATEEMAILADDRESSES]
inner join @TempTbl [TEMP]
on [TEMP].[ID] = [BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ID]
where
[BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ISPRIMARY] <> 0
and [TEMP].[ISPRIMARY] <> 1
-- update the items that exist in the XML table and the db
update [BATCHCONSTITUENTUPDATEEMAILADDRESSES]
set [BATCHCONSTITUENTUPDATEEMAILADDRESSES].[DONOTEMAIL]=temp.[DONOTEMAIL],
[BATCHCONSTITUENTUPDATEEMAILADDRESSES].[EMAILADDRESS]=temp.[EMAILADDRESS],
[BATCHCONSTITUENTUPDATEEMAILADDRESSES].[EMAILADDRESSID]=temp.[EMAILADDRESSID],
[BATCHCONSTITUENTUPDATEEMAILADDRESSES].[EMAILADDRESSTYPECODEID]=temp.[EMAILADDRESSTYPECODEID],
[BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ENDDATE]=temp.[ENDDATE],
[BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ID]=temp.[ID],
[BATCHCONSTITUENTUPDATEEMAILADDRESSES].[INFOSOURCECODEID]=temp.[INFOSOURCECODEID],
[BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ISPRIMARY]=temp.[ISPRIMARY],
[BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ROWORIGINCODE]=coalesce(temp.[ROWORIGINCODE], [BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ROWORIGINCODE]),
[BATCHCONSTITUENTUPDATEEMAILADDRESSES].[SEQUENCE]=temp.[SEQUENCE],
[BATCHCONSTITUENTUPDATEEMAILADDRESSES].[STARTDATE]=temp.[STARTDATE],
[BATCHCONSTITUENTUPDATEEMAILADDRESSES].[UPDATEHOUSEHOLD]=temp.[UPDATEHOUSEHOLD],
[BATCHCONSTITUENTUPDATEEMAILADDRESSES].CHANGEDBYID = @CHANGEAGENTID,
[BATCHCONSTITUENTUPDATEEMAILADDRESSES].DATECHANGED = @CHANGEDATE,
[BATCHCONSTITUENTUPDATEEMAILADDRESSES].[DONOTEMAILREASONCODEID]=temp.[DONOTEMAILREASONCODEID],
[BATCHCONSTITUENTUPDATEEMAILADDRESSES].[INFOSOURCECOMMENTS]=temp.[INFOSOURCECOMMENTS]
from dbo.[BATCHCONSTITUENTUPDATEEMAILADDRESSES] inner join @TempTbl as [temp] on [BATCHCONSTITUENTUPDATEEMAILADDRESSES].ID = [temp].ID
where ([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[DONOTEMAIL]<>temp.[DONOTEMAIL]) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[DONOTEMAIL] is null and temp.[DONOTEMAIL] is not null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[DONOTEMAIL] is not null and temp.[DONOTEMAIL] is null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[EMAILADDRESS]<>temp.[EMAILADDRESS]) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[EMAILADDRESS] is null and temp.[EMAILADDRESS] is not null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[EMAILADDRESS] is not null and temp.[EMAILADDRESS] is null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[EMAILADDRESSID]<>temp.[EMAILADDRESSID]) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[EMAILADDRESSID] is null and temp.[EMAILADDRESSID] is not null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[EMAILADDRESSID] is not null and temp.[EMAILADDRESSID] is null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[EMAILADDRESSTYPECODEID]<>temp.[EMAILADDRESSTYPECODEID]) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[EMAILADDRESSTYPECODEID] is null and temp.[EMAILADDRESSTYPECODEID] is not null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[EMAILADDRESSTYPECODEID] is not null and temp.[EMAILADDRESSTYPECODEID] is null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ENDDATE]<>temp.[ENDDATE]) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ENDDATE] is null and temp.[ENDDATE] is not null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ENDDATE] is not null and temp.[ENDDATE] is null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ID]<>temp.[ID]) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ID] is null and temp.[ID] is not null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ID] is not null and temp.[ID] is null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[INFOSOURCECODEID]<>temp.[INFOSOURCECODEID]) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[INFOSOURCECODEID] is null and temp.[INFOSOURCECODEID] is not null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[INFOSOURCECODEID] is not null and temp.[INFOSOURCECODEID] is null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ISPRIMARY]<>temp.[ISPRIMARY]) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ISPRIMARY] is null and temp.[ISPRIMARY] is not null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ISPRIMARY] is not null and temp.[ISPRIMARY] is null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ROWORIGINCODE]<>coalesce(temp.[ROWORIGINCODE], [BATCHCONSTITUENTUPDATEEMAILADDRESSES].[ROWORIGINCODE])) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[SEQUENCE]<>temp.[SEQUENCE]) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[SEQUENCE] is null and temp.[SEQUENCE] is not null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[SEQUENCE] is not null and temp.[SEQUENCE] is null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[STARTDATE]<>temp.[STARTDATE]) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[STARTDATE] is null and temp.[STARTDATE] is not null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[STARTDATE] is not null and temp.[STARTDATE] is null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[UPDATEHOUSEHOLD]<>temp.[UPDATEHOUSEHOLD]) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[UPDATEHOUSEHOLD] is null and temp.[UPDATEHOUSEHOLD] is not null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[UPDATEHOUSEHOLD] is not null and temp.[UPDATEHOUSEHOLD] is null or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[DONOTEMAILREASONCODEID]<>temp.[DONOTEMAILREASONCODEID]) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[DONOTEMAILREASONCODEID] is null and temp.[DONOTEMAILREASONCODEID] is not null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[DONOTEMAILREASONCODEID] is not null and temp.[DONOTEMAILREASONCODEID] is null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[INFOSOURCECOMMENTS]<>temp.[INFOSOURCECOMMENTS]) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[INFOSOURCECOMMENTS] is null and temp.[INFOSOURCECOMMENTS] is not null) or
([BATCHCONSTITUENTUPDATEEMAILADDRESSES].[INFOSOURCECOMMENTS] is not null and temp.[INFOSOURCECOMMENTS] is null))
if @@Error <> 0
return 3;
-- insert new items
insert into [BATCHCONSTITUENTUPDATEEMAILADDRESSES]
([BATCHCONSTITUENTUPDATEID],
[DONOTEMAIL],
[EMAILADDRESS],
[EMAILADDRESSID],
[EMAILADDRESSTYPECODEID],
[ENDDATE],
[ID],
[INFOSOURCECODEID],
[ISPRIMARY],
[ROWORIGINCODE],
[SEQUENCE],
[STARTDATE],
[UPDATEHOUSEHOLD],
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED,
[DONOTEMAILREASONCODEID],
[INFOSOURCECOMMENTS])
select @BATCHCONSTITUENTUPDATEID,
[DONOTEMAIL],
[EMAILADDRESS],
[EMAILADDRESSID],
[EMAILADDRESSTYPECODEID],
[ENDDATE],
[ID],
[INFOSOURCECODEID],
[ISPRIMARY],
coalesce([ROWORIGINCODE], cast(0 as tinyint)) as [ROWORIGINCODE],
[SEQUENCE],
[STARTDATE],
[UPDATEHOUSEHOLD],
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
DONOTEMAILREASONCODEID,
INFOSOURCECOMMENTS
from @TempTbl as [temp]
where not exists (select ID from dbo.[BATCHCONSTITUENTUPDATEEMAILADDRESSES] as data where data.ID = [temp].ID)
if @@Error <> 0
return 4;
return 0;