USP_CONSTITUENTSMARTFIELD_HASCONTACTINFORMATION
Returns a boolean to indicate if email is present for constituent smart fields
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CHECKEMAIL | bit | IN | |
@CHECKPHONE | bit | IN | |
@CHECKADDRESS | bit | IN | |
@ASOF | datetime | IN | |
@SMARTFIELDID | uniqueidentifier | IN | |
@SITES | xml | IN |
Definition
Copy
CREATE procedure dbo.[USP_CONSTITUENTSMARTFIELD_HASCONTACTINFORMATION]
(
@CHECKEMAIL bit,
@CHECKPHONE bit,
@CHECKADDRESS bit,
@ASOF datetime,
@SMARTFIELDID uniqueidentifier = null,
@SITES xml = null
)
as
begin
set nocount on;
if not exists (select T.c.value('(SITEID)[1]','uniqueidentifier') from @SITES.nodes('/SITES/ITEM') T(c))
set @SITES = null;
declare @SITESFILTER nvarchar(max) = ' ((@SITES is null) or exists(select 1 from dbo.[CONSTITUENTSITE] inner join dbo.[UFN_CONSTITUENT_GETSITES_FROMITEMLISTXML](@SITES) [SITES] on [SITES].[SITEID] = [CONSTITUENTSITE].[SITEID] where [CONSTITUENTSITE].[CONSTITUENTID] = [CONTACTTABLE].[CONSTITUENTID]))';
declare @sql nvarchar(max) = '
select
[C].[ID],
case
when exists(select [ID] from (
select [CONTACTTABLE].[ID], [CONTACTTABLE].[CONSTITUENTID] from dbo.[EMAILADDRESS] as [CONTACTTABLE] where @CHECKEMAIL = 1' + char(13);
if @SITES is not null
set @SQL = @SQL + 'and' + @SITESFILTER + char(13);
set @SQL = @SQL + 'union all
select [CONTACTTABLE].[ID], [CONTACTTABLE].[CONSTITUENTID] from dbo.[PHONE] as [CONTACTTABLE] where @CHECKPHONE = 1' + char(13);
if @SITES is not null
set @SQL = @SQL + 'and' + @SITESFILTER + char(13);
set @SQL = @SQL + 'union all
select [CONTACTTABLE].[ID], [CONTACTTABLE].[CONSTITUENTID] from dbo.[ADDRESS] as [CONTACTTABLE] where @CHECKADDRESS = 1' + char(13);
if @SITES is not null
set @SQL = @SQL + 'and' + @SITESFILTER + char(13);
set @SQL = @SQL + ') as [A]
where [A].[CONSTITUENTID] = [C].[ID])
then 1
else 0
end as [VALUE]
from dbo.[CONSTITUENT] as [C]' + char(13);
if @SITES is not null
set @SQL = @SQL + 'where ((@SITES is null) or exists(select 1 from dbo.[CONSTITUENTSITE] inner join dbo.[UFN_CONSTITUENT_GETSITES_FROMITEMLISTXML](@SITES) [SITES] on [SITES].[SITEID] = [CONSTITUENTSITE].[SITEID] where [CONSTITUENTSITE].[CONSTITUENTID] = [C].[ID]))';
-- Backwards compatibility
if @SMARTFIELDID is null
begin
if @SITES is null
exec sp_executesql @sql,
N'@CHECKEMAIL bit,
@CHECKPHONE bit,
@CHECKADDRESS bit',
@CHECKEMAIL,
@CHECKPHONE,
@CHECKADDRESS;
else
exec sp_executesql @sql,
N'@CHECKEMAIL bit,
@CHECKPHONE bit,
@CHECKADDRESS bit,
@SITES xml',
@CHECKEMAIL,
@CHECKPHONE,
@CHECKADDRESS,
@SITES;
end
else
begin
declare @TARGET nvarchar(100);
declare @TARGET_FIELD nvarchar(128);
select
@TARGET = [TABLECATALOG].[TABLENAME],
@TARGET_FIELD = [SMARTFIELD].[VALUECOLUMNNAME]
from dbo.[SMARTFIELD]
left join dbo.[TABLECATALOG] on [SMARTFIELD].[TABLECATALOGID] = [TABLECATALOG].[ID]
where [SMARTFIELD].[ID] = @SMARTFIELDID;
set @sql = '
merge dbo.' + @TARGET + ' as target
using (' + @sql + ') as source
on target.ID = source.ID
when matched then
update set ' + @TARGET_FIELD + ' = source.VALUE
when not matched by target then
insert (ID, ' + @TARGET_FIELD + ')
values (source.ID, source.VALUE)
when not matched by source then
delete;';
if @SITES is null
exec sp_executesql @sql,
N'@CHECKEMAIL bit,
@CHECKPHONE bit,
@CHECKADDRESS bit',
@CHECKEMAIL,
@CHECKPHONE,
@CHECKADDRESS;
else
exec sp_executesql @sql,
N'@CHECKEMAIL bit,
@CHECKPHONE bit,
@CHECKADDRESS bit,
@SITES xml',
@CHECKEMAIL,
@CHECKPHONE,
@CHECKADDRESS,
@SITES;
select @@ROWCOUNT;
end
end