USP_DATAFORMTEMPLATE_ADD_RESEARCHLISTSPLITBATCH
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@CONTEXTID | uniqueidentifier | IN | |
@BATCHSIZE | int | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_RESEARCHLISTSPLITBATCH
(
@ID uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTAPPUSERID uniqueidentifier,
@CONTEXTID uniqueidentifier,
@BATCHSIZE integer = 1
)
as begin
set nocount on;
--Begin work
begin try
begin transaction;
declare @PREFIX nvarchar(50) = 'Subquery: ';
declare @RESEARCHGROUPNAME nvarchar(50);
declare @CHILDPREFIX nvarchar(100);
declare @MAXSCREEN int; -- RP search limit, larger searches may not return
declare @RGCOUNT integer;
declare @COUNT integer;
select @RESEARCHGROUPNAME = NAME from dbo.RESEARCHGROUP where @CONTEXTID = ID
set @CHILDPREFIX = @PREFIX + @RESEARCHGROUPNAME;
if exists(select top 1 1 from dbo.RESEARCHGROUP where NAME like @CHILDPREFIX + '%')
raiserror('Child lists already exist for research list ''%s''.', 13, 1, @RESEARCHGROUPNAME);
set @MAXSCREEN = @BATCHSIZE;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @NUMMEMBERS integer = 0;
select @NUMMEMBERS = COUNT(*)
from
RESEARCHGROUPMEMBER
left join
WEALTH on WEALTH.ID = RESEARCHGROUPMEMBER.CONSTITUENTID
where
RESEARCHGROUPMEMBER.RESEARCHGROUPID = @CONTEXTID
if @MAXSCREEN >= @NUMMEMBERS
raiserror('Research list is already smaller than the split size of %i.', 13, 1, @MAXSCREEN);
set @RGCOUNT = @NUMMEMBERS / @MAXSCREEN;
if (@NUMMEMBERS % @MAXSCREEN) > 0
set @RGCOUNT = @RGCOUNT + 1;
select @COUNT = 1
while @COUNT <= @RGCOUNT
begin
insert into dbo.RESEARCHGROUP (
NAME,
DESCRIPTION,
NUMMEMBERS,
OTHERSCANVIEW,
OTHERSCANMODIFY,
ADMINONLY,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
@CHILDPREFIX + ' ' + CAST(@COUNT as varchar(20)) + ' of ' + CAST(@RGCOUNT as varchar(20)),
@CHILDPREFIX,
0,
0,
0,
0,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
select @COUNT = @COUNT + 1
end;
with MEMBER_CTE as (
select
ROW_NUMBER() OVER(ORDER BY C.NAME) AS Row, RGM.CONSTITUENTID
from RESEARCHGROUPMEMBER RGM
inner join CONSTITUENT C on C.ID = RGM.CONSTITUENTID
where RGM.RESEARCHGROUPID = @CONTEXTID
)
insert into dbo.RESEARCHGROUPMEMBER (
RESEARCHGROUPID,
CONSTITUENTID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
RG.RESEARHGROUPID,
MEMBER_CTE.CONSTITUENTID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from MEMBER_CTE
inner join (
select
NTILE(@RGCOUNT) OVER(ORDER BY NAME) SEQUENCE,
ID RESEARHGROUPID
from RESEARCHGROUP where NAME like @CHILDPREFIX + '%'
) RG
on RG.SEQUENCE = ((MEMBER_CTE.ROW - 1)/@MAXSCREEN + 1);
update
dbo.RESEARCHGROUP
set
NUMMEMBERS = (select count(ID) from dbo.RESEARCHGROUPMEMBER where RESEARCHGROUPID = RESEARCHGROUP.ID)
where NAME like @CHILDPREFIX + '%';
commit transaction;
return 0;
end try
begin catch
rollback transaction;
exec dbo.USP_RAISE_ERROR;
end catch
end
return 0