USP_ACCOUNTSTRUCTURE_UPDATEFROMXML
Stored procedure to update account structure
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@XML | xml | IN | |
@CHANGEAGENTID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_ACCOUNTSTRUCTURE_UPDATEFROMXML
(
@XML xml,
@CHANGEAGENTID uniqueidentifier = null
)
as
begin
set nocount on;
declare @PDACCOUNTSYSTEMID uniqueidentifier = '4B121C2C-CCE6-440D-894C-EA0DEF80D50B';
if @CHANGEAGENTID is null
exec USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
-- build a temporary table containing the values from the XML
declare @CURRENTDATE datetime = getdate();
declare @TempTbl table
(
[ID] uniqueidentifier,
[DESCRIPTION] nvarchar(100),
[LENGTH] tinyint,
[SEQUENCE] tinyint,
[ELEMENTTYPECODE] tinyint,
[ELEMENTDEFINITIONCODE] tinyint
)
insert into @TempTbl select
isnull(nullif([ID], '00000000-0000-0000-0000-000000000000'), newid()) ,
[DESCRIPTION],
isnull([LENGTH],0),
[SEQUENCE],
[ELEMENTTYPECODE],
[ELEMENTDEFINITIONCODE]
from dbo.UFN_ACCOUNTSTRUCTURE_FROMITEMLISTXML(@XML)
;merge into dbo.[PDACCOUNTSTRUCTURE]
using @TempTbl T1
on T1.ID = PDACCOUNTSTRUCTURE.ID
when matched then
update set
PDACCOUNTSTRUCTURE.[DESCRIPTION] = T1.[DESCRIPTION],
PDACCOUNTSTRUCTURE.[LENGTH] = T1.[LENGTH],
PDACCOUNTSTRUCTURE.SEQUENCE = T1.SEQUENCE,
PDACCOUNTSTRUCTURE.ELEMENTTYPECODE = T1.ELEMENTTYPECODE,
PDACCOUNTSTRUCTURE.ELEMENTDEFINITIONCODE = T1.ELEMENTDEFINITIONCODE,
PDACCOUNTSTRUCTURE.PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID,
PDACCOUNTSTRUCTURE.ISBASICGL = 0,
PDACCOUNTSTRUCTURE.CHANGEDBYID = @CHANGEAGENTID,
PDACCOUNTSTRUCTURE.DATECHANGED = @CURRENTDATE
when not matched by target then
insert ([ID], [DESCRIPTION], [LENGTH], [SEQUENCE], [SEGMENTSEQUENCE], [ELEMENTTYPECODE], [ELEMENTDEFINITIONCODE], [PDACCOUNTSYSTEMID], [ISBASICGL], ADDEDBYID, DATEADDED, CHANGEDBYID, DATECHANGED)
values (T1.ID, T1.[DESCRIPTION], T1.[LENGTH], T1.[SEQUENCE], 0, T1.[ELEMENTTYPECODE], T1.[ELEMENTDEFINITIONCODE], @PDACCOUNTSYSTEMID, 0, @CHANGEAGENTID, @CURRENTDATE, @CHANGEAGENTID, @CURRENTDATE)
when not matched by source
and PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID then
delete;
update dbo.PDACCOUNTSTRUCTURE set SEGMENTSEQUENCE = 0, DEFAULTDESCRIPTIONSEQUENCE = 0, DEFAULTDESCRIPTIONLENGTH = 0 where ELEMENTTYPECODE = 2
update PDACCOUNTSTRUCTURE set
SEGMENTSEQUENCE =
(select V1.RowNumber from
(select id,row_number() over (order by case SEGMENTSEQUENCE when 0 then 31 else SEGMENTSEQUENCE end)as RowNumber
from dbo.PDACCOUNTSTRUCTURE where ELEMENTTYPECODE = 1) V1
where v1.id = PDACCOUNTSTRUCTURE.id)
where ELEMENTTYPECODE = 1
and PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID
end