USP_MKTCONSTITUENTFILEIMPORT_UPDATEQUANTITIES
Updates segment views where there was a matched source code for constituent file import.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SEGMENTATIONID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@MINIMUMSEQUENCE | int | IN | |
@MAXIMUMSEQUENCE | int | IN |
Definition
Copy
CREATE procedure dbo.[USP_MKTCONSTITUENTFILEIMPORT_UPDATEQUANTITIES]
(
@SEGMENTATIONID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@MINIMUMSEQUENCE int = 0,
@MAXIMUMSEQUENCE int = 2147483647
)
as
set nocount on;
declare @SEGMENTID uniqueidentifier;
declare @TESTSEGMENTID uniqueidentifier;
declare @SQL nvarchar(max);
declare @CONSTITFILETABLE nvarchar(128);
declare @SEQUENCE int;
declare @CACHECLEARED bit;
declare @SEGMENTCURSOR cursor;
declare @CURRENTDATE datetime;
declare @QUANTITY int;
begin try
set @CURRENTDATE = getdate();
if @CHANGEAGENTID is null
exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;
set @CACHECLEARED = 0;
set @CONSTITFILETABLE = dbo.[UFN_MKTCONSTITUENTFILEIMPORT_BUILDTABLENAME](@SEGMENTATIONID);
set @SQL =
'set @SEGMENTCURSOR = cursor local fast_forward for' + char(13) +
' select distinct' + char(13) +
' [MKTSEGMENTATIONSEGMENT].[ID],' + char(13) +
' [MKTSEGMENTATIONSEGMENT].[SEQUENCE]' + char(13) +
' from dbo.[MKTSEGMENTATIONSEGMENT]' + char(13) +
' inner join dbo.[' + @CONSTITFILETABLE + '] as [SEGHOUSEFILE] on [SEGHOUSEFILE].[SEGMENTATIONSEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]' + char(13) +
' inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]' + char(13) +
' left join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENT].[CURRENTSEGMENTLISTID]' + char(13) +
' where ' + char(13) +
' [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID and' + char(13) +
' [MKTSEGMENTATIONSEGMENT].[SEQUENCE] between @MINIMUMSEQUENCE and @MAXIMUMSEQUENCE and' + char(13) +
' ([MKTSEGMENT].[SEGMENTTYPECODE] in (1, 4, 5) or ([MKTSEGMENT].[SEGMENTTYPECODE] = 2 and [MKTSEGMENTLIST].[TYPECODE] = 0)) ' + char(13) +
' order by [MKTSEGMENTATIONSEGMENT].[SEQUENCE];' + char(13) +
'open @SEGMENTCURSOR;'
exec sp_executesql @SQL, N'@SEGMENTCURSOR cursor output, @SEGMENTATIONID uniqueidentifier, @MINIMUMSEQUENCE int, @MAXIMUMSEQUENCE int', @SEGMENTCURSOR = @SEGMENTCURSOR output, @SEGMENTATIONID = @SEGMENTATIONID, @MINIMUMSEQUENCE = @MINIMUMSEQUENCE, @MAXIMUMSEQUENCE = @MAXIMUMSEQUENCE;
fetch next from @SEGMENTCURSOR into @SEGMENTID, @SEQUENCE;
while (@@FETCH_STATUS = 0)
begin
/* Only run clear cache for the lowest sequence segment. */
if @CACHECLEARED = 0
begin
exec dbo.[USP_MKTSEGMENTATIONSEGMENT_CLEARCACHE] @SEGMENTID, 0, 0;
set @CACHECLEARED = 1
end
/* Reset all the test segment counts to zero for this segment... */
update dbo.[MKTSEGMENTATIONTESTSEGMENT] set
[SAMPLESIZE] = 0,
[SAMPLESIZETYPECODE] = 1,
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE
where [SEGMENTID] = @SEGMENTID;
fetch next from @SEGMENTCURSOR into @SEGMENTID, @SEQUENCE;
end;
close @SEGMENTCURSOR;
deallocate @SEGMENTCURSOR;
/* Update the sample size in the MKTSEGMENTATIONTESTSEGMENT table. */
set @SQL =
'set @SEGMENTCURSOR = cursor local fast_forward for' + char(13) +
' select distinct' + char(13) +
' [SEGHOUSEFILE].[SEGMENTATIONTESTSEGMENTID],' + char(13) +
' count(distinct [SEGHOUSEFILE].[RECORDID])' + char(13) +
' from dbo.[MKTSEGMENTATIONTESTSEGMENT]' + char(13) +
' inner join dbo.[' + @CONSTITFILETABLE + '] as [SEGHOUSEFILE] on [SEGHOUSEFILE].[SEGMENTATIONTESTSEGMENTID] = [MKTSEGMENTATIONTESTSEGMENT].[ID]' + char(13) +
' inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID]' + char(13) +
' where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID' + char(13) +
' group by [SEGHOUSEFILE].[SEGMENTATIONTESTSEGMENTID]' + char(13) +
'open @SEGMENTCURSOR;'
exec sp_executesql @SQL,N'@SEGMENTCURSOR cursor output, @SEGMENTATIONID uniqueidentifier', @SEGMENTCURSOR = @SEGMENTCURSOR output, @SEGMENTATIONID = @SEGMENTATIONID;
fetch next from @SEGMENTCURSOR into @TESTSEGMENTID, @QUANTITY;
while(@@fetch_status = 0)
begin
/* Update the test segment to the actual quantity from the constituent file... */
update dbo.[MKTSEGMENTATIONTESTSEGMENT] set
[SAMPLESIZE] = @QUANTITY,
[SAMPLESIZETYPECODE] = 1,
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE
where [ID] = @TESTSEGMENTID;
fetch next from @SEGMENTCURSOR into @TESTSEGMENTID, @QUANTITY;
end
close @SEGMENTCURSOR;
deallocate @SEGMENTCURSOR;
end try
begin catch
exec dbo.[USP_RAISE_ERROR];
return 1;
end catch
return 0;