![]() |
---|
CREATE trigger [dbo].[TR_GROUPMEMBER_INSERT_HOUSEHOLD_UPDATE] on [dbo].[GROUPMEMBER] after insert, update not for replication as begin set nocount on; if update([ISPRIMARY]) begin declare @CHANGEAGENTID uniqueidentifier; declare @CURRENTDATE datetime = getdate(); -- For audit reasons: -- Use the same ChangeAgentId used to update the groupmember row if it was updated. -- If null, the set will simply coalesce out and effectively do nothing -- Since this trigger may be hit by a bulk update, we can not assume that all ChangeByIds are the same for all records unless they aren't being specified. if update([CHANGEDBYID]) set @CHANGEAGENTID = null; else exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output; declare @HOUSEHOLDNAME nvarchar(100); declare @HASNAMEFORMATFUNCTION bit = 0; select @HOUSEHOLDNAME = left(dbo.[UFN_NAMEFORMAT_FROMID]([GROUPDATA].[NAMEFORMATFUNCTIONID], [GROUPMEMBER].[MEMBERID]), 100), @HASNAMEFORMATFUNCTION = 1 from inserted inner join dbo.[GROUPDATA] on inserted.[GROUPID] = [GROUPDATA].[ID] inner join dbo.[GROUPMEMBER] on inserted.[GROUPID] = [GROUPMEMBER].[GROUPID] where [GROUPDATA].[NAMEFORMATFUNCTIONID] is not null and [GROUPMEMBER].[ISPRIMARY] <> 0; if @HASNAMEFORMATFUNCTION = 1 begin if @HOUSEHOLDNAME is null or @HOUSEHOLDNAME = '' begin declare @FALLBACKHOUSEHOLDNAMEFORMATID uniqueidentifier select @FALLBACKHOUSEHOLDNAMEFORMATID = ID from dbo.NAMEFORMATFUNCTION where FORMATSQLFUNCTION = 'UFN_NAMEFORMAT_32'; select @HOUSEHOLDNAME = left(dbo.[UFN_NAMEFORMAT_FROMID](@FALLBACKHOUSEHOLDNAMEFORMATID, [GROUPMEMBER].[MEMBERID]), 100) from inserted inner join dbo.[GROUPMEMBER] on inserted.[GROUPID] = [GROUPMEMBER].[GROUPID] where [GROUPMEMBER].[ISPRIMARY] <> 0; end update dbo.[CONSTITUENT] set [KEYNAME] = @HOUSEHOLDNAME, [DATECHANGED] = @CURRENTDATE, [CHANGEDBYID] = isnull(@CHANGEAGENTID, inserted.[CHANGEDBYID]) from inserted inner join dbo.[GROUPMEMBER] on inserted.[GROUPID] = [GROUPMEMBER].[GROUPID] where [CONSTITUENT].[ID] = inserted.[GROUPID] and [GROUPMEMBER].[ISPRIMARY] <> 0; end end --Insert new members into the constituent current household table... insert into dbo.[CONSTITUENTHOUSEHOLD] ([ID], [HOUSEHOLDID], [ISPRIMARYMEMBER]) select inserted.[MEMBERID], inserted.[GROUPID], inserted.[ISPRIMARY] from inserted inner join dbo.[GROUPDATA] on [GROUPDATA].[ID] = inserted.[GROUPID] where [GROUPDATA].[GROUPTYPECODE] = 0 and not exists(select 1 from dbo.[CONSTITUENTHOUSEHOLD] where [ID] = inserted.[MEMBERID]); --Update the constituent current household table... update dbo.[CONSTITUENTHOUSEHOLD] set [HOUSEHOLDID] = inserted.[GROUPID], [ISPRIMARYMEMBER] = inserted.[ISPRIMARY] from inserted inner join dbo.[GROUPDATA] on [GROUPDATA].[ID] = inserted.[GROUPID] inner join dbo.[CONSTITUENTHOUSEHOLD] on [CONSTITUENTHOUSEHOLD].[ID] = inserted.[MEMBERID] where [GROUPDATA].[GROUPTYPECODE] = 0; end |