USP_EMAIL_GETCHUNKEDMERGEDATA
Gets chunked merge data.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@QUEUEID | uniqueidentifier | IN | |
@ISFIRSTCHUNK | bit | IN | |
@INSTANCEID | uniqueidentifier | IN | |
@PROCESSINGID | uniqueidentifier | IN | |
@TOTALMERGEROWS | int | IN | |
@AREALLEMAILSBLACKLISTED | bit | INOUT |
Definition
Copy
CREATE procedure [dbo].[USP_EMAIL_GETCHUNKEDMERGEDATA]
(
@QUEUEID uniqueidentifier,
@ISFIRSTCHUNK bit,
@INSTANCEID uniqueidentifier,
@PROCESSINGID uniqueidentifier,
@TOTALMERGEROWS integer,
@AREALLEMAILSBLACKLISTED bit = 0 output
)
with execute as owner
as
begin
set nocount on;
declare @GETCHUNKDATASQL nvarchar(4000)
declare @TABLENAME nvarchar(255)
declare @UNIQUEIDFIELDNAME nvarchar(128)
declare @EMAILADDRESSFIELDNAME nvarchar(128)
declare @MERGEDATAOBJECT nvarchar(256)
begin try
select @UNIQUEIDFIELDNAME = UNIQUEIDFIELDNAME, @EMAILADDRESSFIELDNAME = EMAILADDRESSFIELDNAME from dbo.EMAILSTATUSGENERALPURPOSE where EMAILQUEUEGENERALPURPOSEID = @QUEUEID;
--If the viewname is null this job was passed over with a dataset instead of a view. A table was created prior to this step to hold the dataset merge data
select @MERGEDATAOBJECT =
case
when ISNULL(SQLVIEWCATALOG.VIEWNAME,'00000000-0000-0000-0000-000000000000') = '00000000-0000-0000-0000-000000000000' then dbo.UFN_GENERALPURPOSEEMAIL_GETMERGEDATASETTABLENAME(@QUEUEID)
else 'dbo.' + SQLVIEWCATALOG.VIEWNAME
end
from EMAILQUEUEGENERALPURPOSE left join SQLVIEWCATALOG on EMAILQUEUEGENERALPURPOSE.MERGESQLVIEWID = SQLVIEWCATALOG.ID where EMAILQUEUEGENERALPURPOSE.ID = @QUEUEID;
set @TABLENAME = dbo.UFN_GENERALPURPOSEEMAIL_GETDATATABLENAME(@QUEUEID)
set @GETCHUNKDATASQL = 'set nocount on;
if object_id(''' + @MERGEDATAOBJECT + ''') is not null
begin
-- create and populate recipient table on first chunk
if ' + cast(@ISFIRSTCHUNK as nvarchar(10)) + ' = 1 and object_id(''' + @TABLENAME + ''') is null
begin
--if object_id(''' + @TABLENAME + ''') is not null drop table ' + @TABLENAME + ';
create table ' + @TABLENAME + ' (MERGEROWID uniqueidentifier not null, INSTANCEID uniqueidentifier not null, RECIPIENTID integer not null identity (1, 1));
declare @MERGEIDS table
(
MERGEROWID uniqueidentifier
)
insert into ' + @TABLENAME + ' (MERGEROWID, INSTANCEID) output inserted.MERGEROWID into @MERGEIDS select [' + @UNIQUEIDFIELDNAME + '], ''' + cast(@INSTANCEID as nvarchar(36)) + ''' from ' + @MERGEDATAOBJECT + ' where not exists (select 1 from dbo.EMAILINVALIDRECIPIENT where ADDRESS = [' + @EMAILADDRESSFIELDNAME + '] and ISBLACKLISTED = 1) order by [' + @UNIQUEIDFIELDNAME + '];
create nonclustered index IX_' + right(@TABLENAME,len(@TABLENAME) - 4) + '_MERGEROWID on ' + @TABLENAME + '
(
MERGEROWID asc
);
if (select top 1 1 from @MERGEIDS) is null
begin
set @AREALLEMAILSBLACKLISTEDOUT = 1;
-- drop table
if object_id(''' + @TABLENAME + ''') is not null drop table ' + @TABLENAME + ';
end
end
else
begin
update ' + @TABLENAME + ' set INSTANCEID = ''' + cast(@INSTANCEID as nvarchar(36)) + '''
where INSTANCEID = ''00000000-0000-0000-0000-000000000000'';
end
if @AREALLEMAILSBLACKLISTEDOUT = 0
begin
-- get data from table (invalid accounts should never make it to the table now that we filter the inserted rows)
select MD.*, P.RECIPIENTID TEMPRECIPID001 from ' + @MERGEDATAOBJECT + ' MD inner join
' + @TABLENAME + ' P on MD.[' + @UNIQUEIDFIELDNAME + '] = P.MERGEROWID and P.INSTANCEID = ''' + cast(@INSTANCEID as nvarchar(36)) + ''' ;
end
end'
declare @PARAMDEFINITION nvarchar(500) = N'@AREALLEMAILSBLACKLISTEDOUT bit = 0 output';
exec sp_executesql @GETCHUNKDATASQL, @PARAMDEFINITION, @AREALLEMAILSBLACKLISTEDOUT = @AREALLEMAILSBLACKLISTED output;
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
end